help understanding release sematics

David Holmes david.holmes at
Mon Nov 7 04:15:36 UTC 2016

On 7/11/2016 1:09 PM, 恶灵骑士 wrote:
> Hi,
> in OrderAccess
> inline void OrderAccess::storestore() { release(); }
> inline void OrderAccess::loadstore()  { acquire(); }
> the storestore can complete release sematics why some blog saying that release sematics include both storestore and loadstore?

You are looking at a particular platform's implementation where the two 
things are the same at the hardware level. Conceptually it is the wrong 
way to express it.

In orderAccess.hpp we define:

acquire() == loadLoad|loadStore
release() == loadStore|storeStore

This is a particular definition inside hotspot such that we define an 
equivalence between these pairs:

release_store(&x, 1) → release(); x = 1;


y = load_acquire(&x) → y = x; acquire();

In the more general literature this equivalence does not exist as the 
two statements could be reordered.

acquire/release can not be exactly expressed using loadload/loadstore etc.

I actually have a presentation on all this that I just did last week. I 
plan to add a few updates then make it available.


> i can understand what blog say but i am a little confused by the code.
> thank you !
> Arron

More information about the hotspot-dev mailing list