Zgodnie z an article na stronie IBM.com "warunkiem wyścigu jest sytuacja, w której dwa lub więcej wątków lub procesów odczytuje lub zapisuje niektóre udostępnione dane, a ostateczny wynik zależy od czasu zaplanowania wątków. może prowadzić do nieprzewidywalnych wyników i subtelnych błędów programu. " . Chociaż artykuł dotyczy języka Java, ogólnie uczono mnie tej samej definicji.Co ze stanem wyścigu w czytaniu wielowątkowym?
O ile mi wiadomo, prosta operacja odczytu z pamięci RAM polega na ustawieniu stanów określonych linii wejściowych (adres, odczyt itp.) I odczytaniu stanów linii wyjściowych. Jest to operacja, która oczywiście nie może być wykonywana jednocześnie przez dwa urządzenia i musi być serializowana.
Załóżmy teraz, że mamy sytuację, w której kilka wątków uzyskuje dostęp do obiektu w pamięci. Teoretycznie dostęp ten powinien zostać zserializowany, aby zapobiec wyścigowi. Ale np. Algorytmy czytników/pisarzy przyjmują, że dowolna liczba czytników może korzystać z pamięci współdzielonej w tym samym czasie.
Pytanie brzmi: czy w przypadku korzystania z wielowątkowości należy wprowadzić wyłączny blokada do odczytu (np. W WinAPI)? Jeśli nie, dlaczego? Gdzie zaimplementowano tę kontrolę - OS, sprzęt?
poważaniem, Kuba
hah, told'ya;] –