Cel*_*ebi 6 winapi synchronization interlocked
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(),
使用释放内存访问语义执行交换.
所以我很好奇这两个功能之间的区别.何时使用获取内存访问语义或释放内存访问语义?有什么例子吗?
谢谢!
普通版本使用完整屏障,而后缀版本仅处理加载或存储,这在某些CPU(基于Itanium的处理器等)上可能更快
MSDN有一篇关于Acquire和Release Semantics以及Interlocked*API的文章以及这篇精彩的博客文章.在Linux内存屏障文件也可能是有用的...
| 归档时间: |
|
| 查看次数: |
1563 次 |
| 最近记录: |