Memory synchronization flag. If the supplied option is not available on the current platform then a stronger method will be used instead.
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
This struct represents a value which will be subject to competing access. All accesses to this value will be synchronized with main memory, and various memory barriers may be employed for instruction ordering. Any primitive type of size equal to or smaller than the memory bus size is allowed, so 32-bit machines may use values with size <= int.sizeof and 64-bit machines may use values with size <= long.sizeof. The one exception to this rule is that architectures that support DCAS will allow double-wide storeIf operations. The 32-bit x86 architecture, for example, supports 64-bit storeIf operations.
Supported msync values: msync.raw, msync.ssb, msync.acq, msync.rel, msync.seq
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
Supported msync values: msync.raw, msync.ssb, msync.acq, msync.rel, msync.seq
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
Supported msync values: msync.raw, msync.hlb, msync.acq, msync.seq
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
Supported msync values: msync.raw, msync.ssb, msync.acq, msync.rel, msync.seq
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
Supported msync values: msync.raw, msync.ssb, msync.acq, msync.rel, msync.seq
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
The atomic module is intended to provide some basic support for lock-free concurrent programming. Some common operations are defined, each of which may be performed using the specified memory barrier or a less granular barrier if the hardware does not support the version requested. This model is based on a design by Alexander Terekhov as outlined in this thread. Another useful reference for memory ordering on modern architectures is this article by Paul McKenney.