
It's strong. How to tell: x86 doesn't support really have any kind of weak CAS implementation; and our PowerPC implementation loops over LL/SC. (oh, and our asm is marked volatile) As for whether or not there are any uses of CAS that don't need these guarantees, probably the best way to figure this out is to look for any uses of CAS, for which better algorithms using LL/SC are known (since that's really the only well known implementation of this "weak" compare and swap). Of course, it's worth noting that any of these improvements would not apply to today's x86, so they'd be of somewhat limited applicability. Cheers, Edward Excerpts from KwangYul Seo's message of 2013-12-04 23:58:50 -0800:
Hi,
java.util.concurrent.atomic package provides two flavors of compare and set operations: compareAndSet and weakCompareAndSet. The latter does not create any happens-before orderings, so we can use it where no guarantees with respect to previous or subsequent reads and writes of any variables other than the target of the weakCompareAndSet are required.
I'd like to ask if the compare-and-swap function provided by GHC runtime (cas() in includes/stg/SMP.h) is strong or weak. If it is strong, do all use cases of cas() require this semantics?
Regards, Kwang Yul Seo