r6.1.0:LFDS610_BARRIER_PROCESSOR_WRITE

From liblfds.org
Revision as of 14:07, 4 January 2015 by Admin (talk | contribs) (1 revision imported)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Source File

/liblfds610/inc/liblfds610.h

Define

#define LFDS610_BARRIER_PROCESSOR_WRITE  [compiler write processor barrier directive]

Parameters

No parameters.

Return Value

No return value.

Notes

Processors typically are able to re-order the flow of instructions, where this re-ordering is only guaranteed to be valid within the context of a single thread; e.g. if thread A performs an operation and then raises a flag, where thread B is waiting on the flag, the processor will in its re-ordering only take into account that the behaviour of the thread being re-ordered remains valid, such that in this case we might see in thread A the flag being raised before the operation is performed, since the processor isn't taking into account that thread B is written on the assumption the flag will be raised after the operation.

Compilers typically offer a directive which acts as a write processor barrier, where a write processor barrier the prevents the processor re-ordering store operations below the barrier above the barrier and prevents the processor re-ordering store operations above the barrier to below the barrier.

Examples

Under MSVC, there is a compiler intrinsic _mm_sfence(), which has the following prototype;

void _mm_sfence(void);

As such, the implementation of LFDS610_BARRIER_PROCESSOR_WRITE on MSVC looks like this;

#define LFDS610_BARRIER_PROCESSOR_WRITE  _mm_sfence()

Note there is no trailing semi-colon. It is however harmless to have it in the #define.

See Also