-
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
- Rejestrator temperatur - termopara, siec
- Router LTE z możliwością zmian MTU
- Fajny film widziałem...
- Jaka ładowarka sieciowa do Iphona?
- Taśma izolacyjna do prac elektrycznych
- Recenzja 3.1A ;) w 6 gniazdach...
- Re: Recenzja 3.1A ;) w 6 gniazdach...
- Re: Recenzja 3.1A ;) w 6 gniazdach...
- Re: Recenzja 3.1A ;) w 6 gniazdach...
- Wkrętarki, wiertarki...
- Zasilacz impulsowy 12V 10A, coś godnego uwagi jako zamiennik akumulatora wkrętarki
- Mouser - koszt wysyłki
- [OT] Jak wycinac ksztalt w piance lub styropianie?
- FV--> ciepła woda w kranie
- Szok
Najnowsze wątki
- 2025-07-14 granice
- 2025-07-14 Awaria VM?
- 2025-07-14 Gdańsk => Programista Kotlin <=
- 2025-07-14 Warszawa => Junior Rekruter <=
- 2025-07-14 Warszawa => Specjalista rekrutacji IT <=
- 2025-07-14 Wkłady do zniczy...
- 2025-07-14 Warszawa => Specjalista ds. Sprzętu Komputerowego <=
- 2025-07-14 Re: PO chroniło i chroni policyjnych bandziorów [zawiasy za katowanie obywatela (Poznań czerwiec 2012)]
- 2025-07-14 Warszawa => International Freight Forwarder <=
- 2025-07-14 Warszawa => Recruiter 360 <=
- 2025-07-14 Re: Rz?Âd ZAKAZUJE magazyn?Â?w energii ?!! Nowe prawo od 14 lipca to SZOK! ??Â
- 2025-07-14 Warszawa => Sales Assistant <=
- 2025-07-13 Fałszywe alerty
- 2025-07-12 dlaczego gadacie z tym debilem
- 2025-07-13 Unia Europejska przygotowuje nowy podatek