gpt4 book ai didi

c++ - 对于 CPU 无法原子操作的类型,std::atomic 有什么意义?

转载 作者:行者123 更新时间:2023-12-01 15:04:12 24 4
gpt4 key购买 nike

使用 std::atomic 而不是互斥锁的全部意义在于:

  1. 多线程代码的更高性能(读者之间无争用);
  2. 发生严重争用时性能变化较小(重试失败的 RMW 比丢失剩余时间片更不剧烈,因为持有互斥锁的线程已准备好运行但尚未运行);
  3. 与信号处理程序通信的能力。

当使用 a table of mutexes 来“模拟”操作的原子性时:

  1. 在只需要一个修改操作的情况下,性能最多与用户互斥锁一样好;当多个操作顺序使用时,需要进行多次加锁/解锁操作,导致代码效率低下。
  2. 与显式用户互斥体相比,性能不会更可预测。
  3. 这种“模拟”的原子性不能用于阻塞其他代码的代码(例如信号处理程序)。

那么为什么对原子 CPU 操作的如此糟糕的模拟是值得的呢? std::atomic 中非无锁回退机制的用例是什么?

最佳答案

有时您必须编写可以在多个平台上工作的代码,并且在某些平台上可能支持无锁的原子操作,而在其他平台上可能不支持。使用 std::atomic 可以让您两全其美——平台可以支持的最佳性能和平台不能支持的正常行为。一个附带的好处是语义更清晰,并且无意中持有锁的时间比预期的时间长或短的风险更小。

关于c++ - 对于 CPU 无法原子操作的类型,std::atomic 有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59340448/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com