Volatile Narusza jego główne zadanie?
WedługMSDN:
Słowo kluczowe volatile wskazuje, że pole może zostać zmodyfikowane przez wiele wątków wykonywanych w tym samym czasie. Pola zadeklarowane jako niestabilne nie podlegają optymalizacji kompilatora, która zakłada dostęp przez pojedynczy wątek. Gwarantuje to, że najbardziej aktualna wartość jest zawsze obecna na polu.
Zwróć uwagę na ostatnie zdanie:
Gwarantuje to, że najbardziej aktualna wartość jest zawsze obecna na polu.
Istnieje jednak problem z tym słowem kluczowym.
Jaczytać że może zmienić kolejność instrukcji:
First instruction Second instruction Can they be swapped?
Read Read No
Read Write No
Write Write No
Write Read Yes! <----
Oznacza to, że John ustawia wartość na zmienne pole ipóźniej Paul chce przeczytać pole, Paul robistary wartość!
Co tu się dzieje Czy to nie jest główna praca?
Wiem, że istnieją inne rozwiązania, ale moje pytanie dotyczy niestabilnego słowa kluczowego.
Czy powinienem (jako programista) zapobiegać używaniu tego słowa kluczowego - ze względu na takie dziwne zachowanie?