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