Witam
Rozgryzając zagadnienia dotyczące programowania współbieżnego napotkałem się na stwierdzenie że:
warunek zakończenia oczekiwania należy sprawdzać w pętli. Nie ma bowiem gwarancji, że po odblokowaniu wątku czekającego warunek nadal będzie spełniony.
Nie rozumiem w jakim momencie może zdarzyć się aby po odblokowaniu warunek był nie spełniony , regułą jest że zmienia się flagę(warunek) a zaraz potem odblokowuje się wątek,o chyba że został zmieniony warunek(flaga) od innego wątku który czekał na tym samym monitorze a ten wciąż ma czekać.
I tu rodzi się drugie pytanie, notifyAll odblokowuje wszystkie wątki czekające na jednym monitorze , ale przecież wszystkie instrukcje są w bloku synchronizowanym na tym samym obiekcie-monitorze więc nie powinny te kody wykonywać się razem. Chyba że działa to na zasadzie że kiedy już jesteśmy w środku takiego bloku to nikt nam już nic nie zablokuje i powstaje wyjątek w którym po notifyAll wykonują się kody równocześnie synchronizowane na tym samym obiekcie.
Wyprostujecie moją wiedzę?
Pozdrawiam serdecznie i dziękuje za odpowiedzi.