On Tuesday, 13 June 2017 at 06:12:46 UTC, gzp wrote:
But what about compare_exchange (CAS) ? In C++ one have to
provide Memory ordering for success and failure, but not in D.
I have some difficulty already to comprehend MemoryOrder.rel and
MemoryOrder.acq
A cas with MemoryOrder.raw wouldn't be very useful.
Does it mean, it is the strongest sequaential all the time, all
some explicit fence have to be provided.
It uses lock xchg
https://github.com/dlang/druntime/blob/ce0f089fec56f7ff5b1df689f5c81256218e415b/src/core/atomic.d#L769
So no additional fences needed, it is already the strongest IIRC.
imho, if a CAS requires additional memory barriers, it's a bit
useless..