
Peter Dimov wrote:
Markus Schöpflin:
Peter,
I have read your paper referenced above and a few of the other papers dealing with atomic ops, but I failed to find a clear definition of what 'acquire' and 'release' semantics are supposed to mean. Could you point me into the right direction, please? Also, in your paper you're referring to [intro.concur], where could I find this?
I think that the relevant paper at the moment is
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2334.htm
Basically, if a thread A load-acquires a memory location that has been store-released by thread B, then after the load thread A is guaranteed to see the updates that thread B has done prior to the store.
Peter, I have been reading your paper again and I'm puzzled by the following sentence (section 'Fences'): "Release, ensures that all preceding operations in program order are performed after all subsequent stores in program order;". Shouldn't that read that all preceding operations are performed _before_ all subsequent stores, instead of after? Markus