[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