atomic_thread_fence() semantics
Torvald Riegel
triegel@redhat.com
Sat Oct 21 19:50:00 GMT 2017
On Thu, 2017-10-19 at 13:18 +0100, Andrew Haley wrote:
> On 19/10/17 13:10, Jonathan Wakely wrote:
> > There are no atomic operations on atomic objects here, so the fence
> > doesn't synchronize with anything.
>
> Really? This seems rather unhelpful, to say the least.
>
> An atomic release operation X in thread A synchronizes-with an acquire
> fence F in thread B, if
>
> there exists an atomic read Y (with any memory order)
> Y reads the value written by X (or by the release sequence headed by X)
> Y is sequenced-before F in thread B
You write that X is an _atomic_ release operation, but that would have
to be an atomic memory_order_release store. Alternatively, it would
have to be an atomic memory_order_relaxed store sequenced after a
release fence. There are only nonatomic stores in this example, so
reordering them before the release fence is not observable in a correct
program (ie, a data-race-free one).
More information about the Gcc
mailing list