Win32 上的互锁操作与 XXX::atomic
Posted
技术标签:
【中文标题】Win32 上的互锁操作与 XXX::atomic【英文标题】:Interlocked ops vs XXX::atomic on Win32 【发布时间】:2010-11-26 13:27:06 【问题描述】:在Win32平台上使用Interlocked winapi函数代替任何提供原子操作的库有什么优缺点?
便携性不是问题。
【问题讨论】:
【参考方案1】:如果可移植性不是问题,那么您基本上可以决定更信任谁来完成这项工作。库通常旨在提供可移植性。否则,它很难与经过 15 年多的实战考验的操作系统提供的实现竞争。
查看this thread 以查看一个示例,说明显而易见的实现实际上并不是最好的。
【讨论】:
嗯,比如Intel的TBB::atomic即使没有 CPU 支持锁定操作,Interlocked winapi 函数也可以在旧处理器上工作。 386 或者 486,除非您仍然支持 Win9x 和旧版 NT,否则今天不是真正的问题。
【讨论】:
它们在这些 CPU 上的工作方式不同。 (相对于其他互锁操作而言,它们只是原子操作)【参考方案3】:这可能取决于所讨论的特定原子库。
具有特定后端的好的库可能最终会以相同的 ASM 指令实现来发出 x86 lock 指令并完成它们的工作。并假设库本身是可移植的,然后使您的代码可移植。
一个天真的原子实现可能做一些更重的事情,比如使用互斥锁来保护一个正常的变量。我不知道有什么做的——只是提出论点。
因此,鉴于您声明的不可移植性要求,使用 Win32 函数应该没问题。或者,继续使用 Atomic 版本,但也许看看实际的实现。
【讨论】:
以上是关于Win32 上的互锁操作与 XXX::atomic的主要内容,如果未能解决你的问题,请参考以下文章