[cfe-commits] [libcxx] r154508 - /libcxx/trunk/include/atomic
David Chisnall
csdavec at swan.ac.uk
Wed Apr 11 10:59:13 PDT 2012
On 11 Apr 2012, at 18:32, Howard Hinnant wrote:
>> - /*constexpr*/ __atomic_base(_Tp __d) { __atomic_store(&__a_, __d, memory_order_seq_cst); }
>> + /*constexpr*/ __atomic_base(_Tp __d) : __a_(__d) {}
>
> What is the reason that __atomic_init is not needed here? Is this now not an atomic store?
>> - atomic_flag(bool __b) { __atomic_store(&__a_, __b, memory_order_seq_cst); }
>> + atomic_flag(bool __b) : __a_(__b) {}
>
> and here?
Initialisation of an _Atomic() value is not an atomic operation in C11. Clang now understands that the C++ syntax for initialisation should have the same semantics. Short version:
_Atomic(int) i = j; // Non-atomic store
i = k; // Sequentially consistent atomic store
__atomic_store(&i, k, whatever) // Atomic store with whatever ordering
__atomic_init(&i, j); // Non-atomic store
David
More information about the cfe-commits
mailing list