
On Thu, Aug 21, 2008 at 5:23 PM, Simon Thornington <simon.thornington@gmail.com> wrote:
Hi folks,
Quick question about the use of _ReadWriteBarrier (Win32 MSVC):
According to http://msdn.microsoft.com/en-us/library/ms684208(VS.85).aspx , this compiler intrinsic doesn't generate any memory fencing instructions at all, it's strictly a compiler optimization barrier. I was wondering if someone had any documentation to contradict this, or if boost is relying on the new volatile semantics in VC2005 to ensure the fence?
It sure looks like it's being used as if it were a real memory fence, but I am not sure that's the case. I'm not an expert though.
Correct, it only prevents the compiler from reordering - it doesn't emit any fence instruction itself. You must use _mm_lfence/_mm_sfence/_mm_mfence if you want that. It just happens that for many things, fence instructions aren't needed on current x86 hardware. -- Cory Nelson