-
Data: 2023-02-16 19:11:48
Temat: Re: C++ ośla łączka
Od: "Grzegorz Niemirowski" <g...@g...net> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]heby <h...@p...onet.pl> napisał(a):
> Przecież zlinkowałem arykuł, w którym masz jasno wypisane powody i
> ostrzeżenie.
I w sumie jako rozwiązanie podają std::atomic. Ciekawe czy atomic z C też
może być.
>> Cały czas chodzi o programy bare metal, bez schedulera.
> Przerwania to multitasking, taki sam jak w schedulerze preemptive.
Chodziło o to, że jak jest scheduler to zwykle też masz pod ręką semafory,
kolejki itd.
> W pierdołowatych małych cpu zapewne tak. W dużych absolutnie nie. Pisząc
> relatywnie duże programy, o dużej złożoności, z masą wątków i wymianą
> danych między nimi, nie miałem okazji użyć volatile ani razu. Z
> ciekawostek: w poważnych firmach słowo volatile jest wyłapywane przez
> linter kodu i wymaga zgody komisji za zielonym suknem.
Miałem właśnie na myśli MCU.
>> I jakoś w Internecie nie widzę polemiki z tym polecaniem volatile
> Bo jej nie szukasz. Google aż krzyczy "nie uzywaj volatile, to nie działa
> jak myślisz".
> Choćby wiki:
> https://en.wikipedia.org/wiki/Volatile_(computer_pro
gramming)
> [...]Furthermore, in C and C++ it does not work in most threading
> scenarios, and that use is discouraged.[...]"
> "[...]Operations on volatile variables are not atomic, nor do they
> establish a proper happens-before relationship for threading. This is
> specified in the relevant standards (C, C++, POSIX, WIN32),[1] and
> volatile variables are not threadsafe in the vast majority of current
> implementations. Thus, the usage of volatile keyword as a portable
> synchronization mechanism is discouraged by many C/C++ groups[...]".
> Niezliczona ilość postów/stron wyjasnia, dlaczego volatile nie jest tym, o
> czym myślisz, że do czego jest.
> Serio, nie zauważyłes?
Ale cały czas mi chodzi o ten problem cache. Wiem dobrze, że volatile nie
rozwiązuje zacytowanych wyżej problemów.
> W małym procesorze tak.
> Teraz weź duży procesor. Być może Ci zaskoczy, że jeśli to przerwanie to
> inny wątek na innym rdzeniu, to mimo, że rdzeń zapisze z = 1, to pętla
> nigdy się nie zakończy. Bo możesz mieć system ze słabą koherencją cache i
> bez bariery/fence informacja nigdy nie zostanie zsynchronizowana z
> lokalnymi cache obu rdzeni. Albo ciekawoski z przestawianiem zapisów,
> kiedy jeden rdzeń widzi zapis w innej kolejnosci niż wykonany w sąsiednim
> rdzeniu.
> Swoją drogą ten problem jest trudny do zauważenia przez przeciętnego
> wciskacza klawiszy, bo x86 jest wyjątkowo tolerancyjny dla dziadowskiego
> kodu. Tam to działa przypadkiem i wiele osób ma podejrzenie, że nie bez
> powodu takie decyzje projektowe podjęto: łatwiej było zaprojektować
> tolerancyjny procesor niż liczyć na poprawianie miliardów lini kodu po
> kiepskich programistach.
Zgadza się. Niemniej dlatego wspomniałem, że problem dotyczy MCU.
> Powoduje: zablokowanie optymalizacji *całej* zmiennej, wszędzie oraz nie
> usuwa innych problemów z wątkowością, takich jak weak memory ordering czy
> synchronizacja cache.
> Ogólnie działa tylko na małych systemach, gdzie nie ma tego typu zagrożeń,
> co powoduje że volatile jest narzędziem workaroudującym prawidłowe metody,
> a nie metodą samą w sobie.
> Na większych sens jest zerowy, poza dostępem do rejestrów.
OK, tutaj zgoda.
> Jak już musisz mieć niskopoziomowo to wyjasnione, to może zerknij tutaj:
> https://www.kernel.org/doc/html/latest/process/volat
ile-considered-harmful
> .html
Dzięki.
--
Grzegorz Niemirowski
https://www.grzegorz.net/
Następne wpisy z tego wątku
- 16.02.23 19:22 Marek
- 16.02.23 19:27 Marek
- 16.02.23 19:56 heby
- 16.02.23 19:57 heby
- 17.02.23 02:28 JDX
- 17.02.23 02:35 JDX
- 17.02.23 07:17 Marek
- 17.02.23 09:18 heby
- 17.02.23 09:30 J.F
- 17.02.23 10:17 JDX
- 17.02.23 10:28 heby
- 17.02.23 10:41 JDX
- 17.02.23 14:31 J.F
- 17.02.23 14:51 heby
- 17.02.23 16:21 Grzegorz Niemirowski
Najnowsze wątki z tej grupy
- Klip testowy, jak sie to używa
- Jak sie smazy elektronike z odleglosci kilkuset metrów?
- William Shockley, co-inventor of the transistor
- Gazowy kocioł CO regulacja cyklingu i regulacja pogodowa
- Zamek elektroniczny
- szablon do pasty DIY
- Głośnik potrzebny
- Silikonowy przewód ekranowany
- Wtyk bananowy ekranowany
- Co może być gorsze od pożaru elektryka?
- daltonizm
- Mały Linux
- Superkondensator. Czy to się uda?
- Stare filmy o technice
- Zasilanie własnych konstrukcji przez PoE
Najnowsze wątki
- 2025-11-09 Węże do tlenu medycznego
- 2025-11-09 Więcej miejsca na buspasach :-)
- 2025-11-08 kable zawieraja skrobie?
- 2025-11-08 Klip testowy, jak sie to używa
- 2025-11-08 Warszawa => Senior Cloud Engineer - AWS <=
- 2025-11-08 Pewnie za malo zarabial, to sie musial odstresowac
- 2025-11-08 Uszkodzenie na parkingu a odpowiedzialność sprawcy z OC
- 2025-11-08 Środa Wielkopolska => SAP FI/CO Konsultant wewnętrzny <=
- 2025-11-08 Gdańsk => Senior Software Developer C++ <=
- 2025-11-08 Uszkodzenie na parkingu a odpowiedzialność sprawcy z OC
- 2025-11-08 Warszawa => Programista Microsoft Dynamics 365 Finance & Operations (D
- 2025-11-07 Warszawa => International Freight Forwarder <=
- 2025-11-07 Warszawa => C Programmer <=
- 2025-11-07 Warszawa => Starszy Programista C <=
- 2025-11-07 Warszawa => Senior Programmer C <=




Elektromobilność dojrzewa. Auta elektryczne kupujemy z rozsądku, nie dla idei