【发布时间】:2012-04-03 14:02:11
【问题描述】:
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(),
交换是使用释放内存访问语义执行的。
所以我很好奇这两个函数之间的区别。 何时使用获取内存访问语义或释放内存访问语义? 有例子吗?
谢谢!
【问题讨论】:
标签: winapi synchronization interlocked