[concurrency-interest] RFR: 8065804: JEP 171: Clarifications/corrections for fence intrinsics
Martin Buchholz
martinrb at google.com
Thu Nov 27 02:21:40 UTC 2014
On Tue, Nov 25, 2014 at 6:04 AM, Paul Sandoz <paul.sandoz at oracle.com> wrote:
> Hi Martin,
>
> Thanks for looking into this.
>
> 1141 * Currently hotspot's implementation of a Java language-level volatile
> 1142 * store has the same effect as a storeFence followed by a relaxed store,
> 1143 * although that may be a little stronger than needed.
>
> IIUC to emulate hotpot's volatile store you will need to say that a fullFence immediately follows the relaxed store.
Right - I've been groking that.
> The bit that always confuses me about release and acquire is ordering is restricted to one direction, as talked about in orderAccess.hpp [1]. So for a release, accesses prior to the release cannot move below it, but accesses succeeding the release can move above it. And that seems to apply to Unsafe.storeFence [2] (acting like a monitor exit). Is that contrary to C++ release fences where ordering is restricted both to prior and succeeding accesses? [3]
>
> So what about the following?
>
> a = r1; // Cannot move below the fence
> Unsafe.storeFence();
> b = r2; // Can move above the fence?
I think the hotspot docs need to be more precise about when they're
talking about movement of stores and when about loads.
> // release. I.e., subsequent memory accesses may float above the
> // release, but prior ones may not float below it.
As I've said elsewhere, the above makes no sense without restricting
the type of access.
More information about the core-libs-dev
mailing list