On Fri, 1 Nov 2024 10:05:22 GMT, Quan Anh Mai <qa...@openjdk.org> wrote:

>> src/java.base/share/classes/jdk/internal/foreign/SharedSession.java line 90:
>> 
>>> 88:         }
>>> 89: 
>>> 90:         STATE.setOpaque(this, CLOSED);
>> 
>> Why are we using opaque semantics here and not volatile?
>
> Because this variable is not used as a synchronization device, so a stronger 
> order is unnecessary. We still need the store to be observed by other threads 
> when they fail an `acquire` or a `close` so opaque is appropriate here.

I'm dubious about this. Typically these modes work in a symmetric way - if you 
`setOpaque` you need to `getOpaque`. From 
[this](https://gee.cs.oswego.edu/dl/html/j9mm.html):

> Opaque mode, obtained using VarHandle getOpaque and setOpaque, adds 
> constraints over Plain mode that provide minimal awareness of a variable that 
> is subject to interthread access, **when all accesses use Opaque (or 
> stronger) mode**

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/21810#discussion_r1827487516

Reply via email to