InterlockedCompareExchangeRelease()和之间有什么区别InterlockedCompareExchangeAcquire()?
当我尝试使用WIN32 API学习同步函数时,我发现有两个名称不同的函数,但似乎做同样的事情:
LONG __cdecl InterlockedCompareExchangeRelease(
__inout LONG volatile *Destination,
__in LONG Exchange,
__in LONG Comparand
);
Run Code Online (Sandbox Code Playgroud)
和
LONG __cdecl InterlockedCompareExchangeAcquire(
__inout LONG volatile *Destination,
__in LONG Exchange,
__in LONG Comparand
);
Run Code Online (Sandbox Code Playgroud)
我检查MSDN,它说这些功能是:
对指定的值执行原子比较和交换操作.该函数根据比较结果比较两个指定的32位值并与另一个32位值进行交换.
但对于InterlockedCompareExchangeAcquire(),
使用获取内存访问语义执行操作.
并且InterlockedCompareExchangeRelease(),
使用释放内存访问语义执行交换.
所以我很好奇这两个功能之间的区别.何时使用获取内存访问语义或释放内存访问语义?有什么例子吗?
谢谢!