相关疑难解决方法(0)

InterlockedCompareExchange Release()和Acquire()之间有什么区别?

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(),

使用释放内存访问语义执行交换.

所以我很好奇这两个功能之间的区别.何时使用获取内存访问语义释放内存访问语义?有什么例子吗?

谢谢!

winapi synchronization interlocked

6
推荐指数
1
解决办法
1563
查看次数

标签 统计

interlocked ×1

synchronization ×1

winapi ×1