On Wed, 13 Aug 2025 14:18:42 GMT, Emanuel Peter <epe...@openjdk.org> wrote:
> > We have discussed the possibility of threads seeing different values, like > > in the above example by @eme64. We think this is ok because there are no > > guarantees of inter-thread visibility for memory segments. This has to be > > provided externally (e.g., using volatile/CAS operations). There are other > > cases where we are susceptible to similar problems (e.g, when doing > > unaligned long access). In short, segments do not fulfill all the aspects > > of the normal Java memory model (like for arrays). > > Hmm, I see. Is this documented in the `MemorySegment` API? What are all the > bad things that can happen? > > * Tearing of unaligned access - can it also tear if the user has ensured > alignment? > * Repeated instructions (like the repeated copy I pointed out above). > > It is of course a little surprising that you lose the Java memory model > guarantees of instruction ordering if you wrap an array in a `MemorySegment`. This is unavoidable. Consider the case where we have a wrapped `long[]` in a segment, and then we get a new `var s2 = segment.asSlice(1)` on which we operate with long semantics... ------------- PR Comment: https://git.openjdk.org/jdk/pull/26672#issuecomment-3184150135