【问题标题】:Interlocked ops vs XXX::atomic on Win32Win32 上的互锁操作与 XXX::atomic
【发布时间】:2023-03-27 00:00:01
【问题描述】:

在Win32平台上使用Interlocked winapi函数代替任何提供原子操作的库有什么优缺点?

便携性不是问题。

【问题讨论】:

    标签: c++ winapi atomic interlocked


    【解决方案1】:

    如果可移植性不是问题,那么您基本上可以决定更信任谁来完成这项工作。库通常旨在提供可移植性。否则,它很难与经过 15 年多的实战考验的操作系统提供的实现竞争。

    查看this thread 以查看一个示例,说明显而易见的实现实际上并不是最好的。

    【讨论】:

    • 嗯,比如Intel的TBB::atomic。微软提供操作系统,而英特尔生产处理器。你会更信任谁?
    • 呵呵,你相信 Intel 代码可以在 AMD 处理器上正常运行吗?
    • 让我们假设代码将始终在英特尔处理器上运行,这在我的情况下是正确的。
    【解决方案2】:

    即使没有 CPU 支持锁定操作,Interlocked winapi 函数也可以在旧处理器上工作。 386 或者 486,除非您仍然支持 Win9x 和旧版 NT,否则今天不是真正的问题。

    【讨论】:

    • 它们在这些 CPU 上的工作方式不同。 (相对于其他互锁操作而言,它们只是原子操作)
    【解决方案3】:

    这可能取决于所讨论的特定原子库。

    具有特定后端的好的库可能最终会以相同的 ASM 指令实现来发出 x86 lock 指令并完成它们的工作。并假设库本身是可移植的,然后使您的代码可移植。

    一个天真的原子实现可能做一些更重的事情,比如使用互斥锁来保护一个正常的变量。我不知道有什么做的——只是提出论点。

    因此,鉴于您声明的不可移植性要求,使用 Win32 函数应该没问题。或者,继续使用 Atomic 版本,但也许看看实际的实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 1970-01-01
      • 2015-06-23
      • 1970-01-01
      相关资源
      最近更新 更多