[Java lista] A synchronized mítosz
Auth Gábor
auth.gabor at javaforum.hu
2008. Júl. 31., Cs, 15:22:01 CEST
Halihó!
biziclop ezt írta:
> Lokalis valtozon meg mit szamit? :)
Fizikailag ez úgy néz ki, hogy a proci betölti az adott változót egy
regiszterbe, növeli az értékét, majd visszaírja a memóriába, ez három
utasítás, nem atomi művelet, ezért volatile esetén is simán lehet, hogy kettő
szál teszi ezt, és nem azt kapod, amit vártál.
A volatile azt jelzi a fordító felé, hogy a változón való művelet esetén
mindig töltse be azt a memóriából, végezze el a műveletet majd írja ki a
memóriába az új értéket.
A volatile nélkül a fordító olyan kódot fog fordítani, amelynél betölti a
lehető legtöbb regiszterbe a változókat, majd a sok-sok művelet végén
visszaírja azokat. És így több esélyt ad arra, hogy az ütemező megszakítja a
folyamatot, elmentődnek a regiszter értékek, és amikor folytatná a munkát, és
a művelet végén írná vissza a regiszterekből az értékeket, akkor egy másik
szál már rég megváltoztatta azokat, így hibás értékek lesznek a változókban.
--
http://www.javaforum.hu -=- http://www.enaplo.hu
Auth Gábor -=- http://www.javaforum.hu/web/10/authgabor
További információk a(z) Javalist levelezőlistáról