Zapis do volatile fieldu a citanie z volatile fieldu taktiez vytvaraju 
happens-before vztah.  

"return f" je citanie fieldu. Zapis a citanie z fieldov je atomicka operacia 
okrem pripadu ze ide o long alebo double, ktore zaroven nie su volatile. Inymi 
slovami, citanie a zapis volatile long a volatile double fieldov je atomicka 
operacia. Cize odpoved na Vasu otazku je, ze to zavisi od "volatile" a od toho 
ci je "f" long/double alebo nie.

-Peter  


On Wednesday, 13. June 2012 at 10:59, Libor Jelinek wrote:

> Aaaa! Pravda! Synchronized vlastně mj. nastavuje i happens-before vztah.
>  
> Podotázka k setteru: Kdybych z nějakého prapodivného důvodu nechtěl mít 
> setter setter metodu jako synchronized, bylo by ekvivalentní nastavované pole 
> označit jako volatile, že?  
>  
> Zbývající otázka: Je "return f" v getteru atomická operace nebo není?
>  
>  
> 2012/6/13 Peter Štibraný <[email protected] (mailto:[email protected])>
> > Dobry den,
> >  
> > problem nie je s atomicitou operacie, ale s tym, aby tato zmena (zapis do 
> > premennej) bola viditelna v inych threadoch. Ak takuto viditelnost 
> > potrebujete, tak potrebujete nejaku formu synchronizacie. Ak tam ziadnu 
> > synchronizaciu mat nebudete, tak sa moze stat ze ine thready uvidia staru 
> > hodnotu.
> >  
> > -Peter
> >  
> >  
> > On Wednesday, 13. June 2012 at 10:34, Libor Jelinek wrote:
> >  
> > > DD,
> > > často při čtení kódu (ale i učebnicích) narážím na něco jako toto:
> > >  
> > > class A {
> > > private int f;
> > > public synchronized int getF() { return f };
> > > public synchronized void setF(int f) { this.f = f };
> > > }
> > >  
> > > Podle JLS je atomické jednoduché čtení/zápis referečnní proměnné a 
> > > primitives krom long a double (pokud nejsou volatile). Nehrozí tedy u 
> > > nich žádné interleaving (přerušení v půlce).
> > >  
> > > To, myslím, beze zbytku platí pro setF(), kdy se jedná o jednoduché 
> > > nastavení, a tedy nemusí být synchronized.
> > >  
> > > U getF() jsou to možná dvě operace (instrukce) pro JVM (přečíst a 
> > > vrátit), ale nejsem si jistý, a proto v tomto případě taky raději 
> > > synchonizuju...
> > >  
> > > Chci se tedy zeptat, jestli je tedy u setF() synchronizace opravdu 
> > > zbytečná. A jak je to s getF(), zda je to atomická operace a také není 
> > > nutné synchronizovat.
> > >  
> > > Díky
> > > Libor
> >  
>  



Odpovedet emailem