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.