-
Data: 2013-07-02 21:18:51
Temat: Re: pytanie z mutexów
Od: Michoo <m...@v...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]On 02.07.2013 19:56, Edek wrote:
> Dnia pamiętnego Tue, 02 Jul 2013 18:16:18 +0200, Michoo wyjmując peta
> oznajmił:
>> - w przypadku odczytu INIT_DONE pomijamy cały blok - inicjalizacja
>> została już wykonana
>
> Tak, ale nie miała miejsce synchronizacja.
Jaka synchronizacja?
>>
>> Pisane na szybko więc co przeoczyłem?
>
> Model pamięci C++11?
pthreads z nie_pojebaną_architekturą (tm)
> Model Pamięci ma taką cechę że zapis w wątku A jest widoczny w wątku B
> gdy nastąpi uszeregowanie poprzez release w A i acquire w B. Lock() to
> aquire, unlock() to release, albo można w ogóle każdą operację na
> mutexie traktować 'stricter' jako sequence point - czyli jeżeli oba
> wątki przejdą op na mutex to zapis w A może być odczytany w B.
Gwarancja jest oidp silniejsza - jeżeli wątek kończy release to zmiany
są "commited" w pamięci.
> Jeżeli
> nie ma przejścia przez mutex obu wątków mamy race, czyli wątek B
> czyta potencjalnie śmieci.
Czyta albo stary stan, albo nowy stan[*] a nie śmieci - dlatego m.i. się
używa sig_atomic_t - pierwotne rozwiązanie też to zakłada.
[*] W praktyce nawet na NUMA jest utrzymywana spójność cache więc od
momentu zapisu z cache do pamięci wszystkie odczyty będą miały nowy stan.
> Zapis dotyczy zmiennych użytych tutaj i wszystkich
> zapisów w func(), które po przejściu algorytmu muszą być widoczne.
Masz barierę na lock() w linii 07 zaraz po wywołaniu func() a dopiero
potem modyfikację stanu zmiennej w 08.
>
> Uff, definicje z głowy ;). Wątek A i wątek B i numery linii,
> możliwa sekwencja:
>
> A linie 1 do 5 (w 2 i 5 jest mutex)
> A 6: konstruktor (po to jest ten algorytm) może zapisać pola
> A 7: mutex (acquire)
> A 8: once = INIT_DONE
>
> B 1: (once == INIT_DONE) == true (co nie musi być prawdą, ale może)
lock() synchronizuje pamięć
> B 17: wątek używa wartości z A 6, które nie muszą być poprawne,
> bo wątek B nie przeszedł przez żaden mutex. Może odczytać
> śmieci, czyli mamy race
No właśnie nie może, bo to oznacza, że masz architekturę na której
zmiany wykonane po barierze są widoczne przed zmianami wykonanymi przed
barierą.
>
> Powyższa sekwencja może jest mało prawdopodobna, ale mamy
> data race.
Jeżeli chcesz się trzymać litery standardu C++11 to sam odczyt w linii
01 oryginalnego rozwiązania to jest data race, więc całe dalsze
wykonanie to UB.
> Dlatego ten algorytm jest genialny, kolejne
> przejścia są bez synchronizacji.
Powiedziałbym, że jest "normalny" - działa w obrębie pewnych założeń.
Tyle, że rozwiązuje problem, którego imo nie ma przez nałożenie
ograniczenia na liczbę once a przy tym nie eliminując problemu z UB.
--
Pozdrawiam
Michoo
Następne wpisy z tego wątku
- 02.07.13 23:06 Edek
- 03.07.13 02:29 Michoo
- 03.07.13 04:08 Edek
- 09.07.13 14:42 firr
- 10.07.13 15:41 firr
Najnowsze wątki z tej grupy
- Xiaomi [Chiny - przyp. JMJ] produkuje w całkowitych ciemnościach i bez ludzi
- Prezydent SZAP/USONA Trump ułaskawił prezydenta Hondurasu Hernandeza skazanego na 45 lat więzienia
- Rosjanie chwalą się prototypem komputera kwantowego. "Najważniejszy projekt naukowy Rosji"
- A Szwajcarzy kombinują tak: FinalSpark grows human neurons from stem cells and connects them to electrode arrays
- Re: Najgorszy język programowania
- NOWY: 2025-09-29 Alg., Strukt. Danych i Tech. Prog. - komentarz.pdf
- Na grupie comp.os.linux.advocacy CrudeSausage twierdzi, że Micro$lop używa SI do szyfrowania formatu dok. XML
- Błąd w Sofcie Powodem Wymiany 3 Duńskich Fregat Typu Iver Huitfeldt
- Grok zaczął nadużywać wulgaryzmów i wprost obrażać niektóre znane osoby
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
Najnowsze wątki
- 2026-01-29 KSeF - 13 wątpliwości
- 2026-01-29 A ja się pochwalę
- 2026-01-29 Warszawa => Mid/Senior IT Recruiter <=
- 2026-01-29 Warszawa => Senior Java Developer <=
- 2026-01-29 Warszawa => IT Recruiter <=
- 2026-01-28 Degradacja
- 2026-01-28 Wysoki Sąd poinstruował czego unikać wyzywając Owsiaka "Równiejszego"
- 2026-01-28 Białystok => Solution Architect (Workday) - Legal Systems <=
- 2026-01-28 Białystok => Preseles Inżynier (background baz danych) <=
- 2026-01-28 Wrocław => Konsultant wdrożeniowy ERP <=
- 2026-01-28 Łódź => Microsoft Engineer <=
- 2026-01-28 Białystok => Tester manualny <=
- 2026-01-27 Tradycja ciągania posłów po sądach za wystąpienia w Sejmie będzie kontynuowana [Lepper 2]
- 2026-01-27 Pierwszy raz sprzedano więcej samochodów zeeletryfikowanych niż ice
- 2026-01-27 Elektryczny Kałasznikow




Jak kupić pierwsze mieszkanie? Eksperci podpowiadają