Ahojte,

v poslednom case studujem problematiku Java Memory Model-u, a chcel by
som nasimulovat problemy, ktore vzniknu z nekorektnej synchronizacie.

Skusal som nasimulovat problem, o ktorom sa zmienuje Brian Goetz v
jeho prezentacii z Javapolisu 2005. Tam spomina, ze hotspot kompilator
(-server) je schopny pretransformovat slucku

while (running) {
  ... // tu sa running nemeni
}

na

if (running) {
 while (true) {
    ... // tu sa running nemeni
 }
}

pokial pristup k premennej running nie je volatile a vo vnutri while
cyklu sa running nemeni.

Vytvoril som si program, ktory spusta thready, ktore v obdobnej "while
(running)" slucke spustaju sleep. Hlavny thread obcas niektoremu
threadu nastavi running na false (bez akejkolvek synchronizacie,
running nie je ani volatile). Ked pocet threadov klesne pod 50,
vytvori dalsie. Dufal som, ze sa casom prejavi uvedeny efekt tym, ze
pocet threadov prestane klesat. Zial, nedari sa mi nasimulovat ani len
tento problem.

Nemate nejake priklady programov, ktore vdaka chybnej synchronizacii
nebudu fungovat? Najlepsie spustitelny Javovsky kod, ktory sa sprava
necakane. (Na windows/x86).

Vdaka,
-peter

Odpovedet emailem