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