Java >> Java tutorial >  >> Tag >> volatile

Emulering af en hukommelsesbarriere i Java for at slippe af med flygtige læsninger

Så grundlæggende vil du have semantikken i en volatile uden driftsomkostninger.

Jeg tror ikke, det er muligt.

Problemet er, at runtime-omkostningerne på volatile skyldes instruktionerne, der implementerer hukommelsesbarriererne i skriveren og læserkoden. Hvis du "optimerer" læseren ved at slippe af med dens hukommelsesbarriere, så er du ikke længere garanteret, at læseren vil se den "sjældent skrevne" nye værdi, når den faktisk er skrevet.

FWIW, nogle versioner af sun.misc.Unsafe klasse give eksplicit loadFence , storeFence og fullFence metoder, men jeg tror ikke, at brugen af ​​dem vil give nogen fordele i forhold til at bruge en volatile .

Hypotetisk ...

det, du ønsker, er, at én processor i et multi-processor system kan fortælle alle de andre processorer:

"Hej! Uanset hvad du laver, ugyldiggør din hukommelsescache for adressen XYZ, og gør det nu."

Desværre understøtter moderne ISA'er ikke dette.

I praksis styrer hver processor sin egen cache.


Java tag