2010-10-17 19 views
5

Załóżmy, że mamy maszynę wieloprocesorową i aplikację wielowątkową. Jeśli dwa wątki mają dostęp do zsynchronizowanej metody i zostaną wykonane w tym samym czasie, który wątek otrzyma blokadę? lub co się stanie?Który wątek otrzyma blokadę?

Dzięki

+0

Zgaduję, że VM będzie musiała rzucić monetą. –

+0

Trochę związane z http://stackoverflow.com/questions/3940164/java-waiting-on-synchronized-block-who-goes-first – Thilo

+0

Czy to oznacza, że ​​VM może zagłodzić jeden wątek, jeśli oba wątki próbują uzyskać zablokować w pętli? –

Odpowiedz

2

Chodzi o to, że nie ma czegoś takiego jak "w tym samym czasie". Jeden z nich dostanie zamek, ale nie masz możliwości dowiedzenia się, który.

Nie ma czegoś takiego "w tym samym czasie", ponieważ, mówiąc prościej, zamek jest coś, co, który wybiera i wykonuje wątki tylko jeden naraz.

Jest to oczywiście realizowane w czystym systemie monoprocesorowym, który może wykonywać jedną instrukcję naraz. W systemach wieloprocesorowych zwykle istnieje pewne urządzenie sprzętowe, które "blokuje" procesory, aby zapobiec ich jednoczesnemu uruchomieniu.

+1

Dlaczego nie "w tym samym czasie"? –

+0

Dlaczego nie byłoby coś tak "w tym samym czasie". Mówimy o sprzęcie wieloprocesorowym ... – aioobe

+0

Ale kod, który zarządza blokadą, musi jakoś serializować. – Thilo

9

Zachowanie będzie niedeterministyczne (czyli albo gwint może otrzymać blokadę) i może różnić się od wykonania egzekucji. Dzieje się tak dlatego, że zależy to od konkretnej implementacji maszyny JVM i konkretnego harmonogramowania wątków.

Zgodnie z tym artykułem specyfikacja JVM stawia żadnych ograniczeń na sprawiedliwości:

Uczciwość
Model pamięci Java nie określa żadnego wymogu rzetelności na nici lub poboru wielowątkowości. Wątek może odmówić poddania procesora innemu wątkowi i wepchnięciu systemu w zakleszczenie. Zasady uczciwości wobec innych wątków są definiowane przez poszczególne implementacje JVM.

To znaczy, chyba że starannie zsynchronizujesz program, jeden wątek może teoretycznie zostać zagłodzony przez program planujący.

+2

Nie sądzę też, że na tym poziomie będzie "na raz". Jedna nić otrzyma zamek, tylko dzięki temu, że dostanie się tam pierwszy. Nie ma potrzeby rzucania monetą. – Thilo

+0

Tak, zgadzam się ... – aioobe

Powiązane problemy