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