有很多原子是好还是坏?

nik*_*ack 0 c++ atomic c++11

这个问题与我以前有关.我做了一些测试,并发现拥有充满原子的数组比我之前使用互斥锁的方法快得多.但拥有数百万只它可以吗?也许有些东西我根本不知道?

Ric*_*ges 5

原子内在存储没有什么特别之处.它的特别之处在于:

  1. 发出访问数据的指令,以确保不同的线程以正确的顺序查看内存更新,以及

  2. 不允许编译器(实际上是处理器)重新排序指令,以便在存储操作之前发生释放操作,而不是作者的意图(反之亦然).

百万std::atomic<int>s不会消耗比代表它们所需的内存更多的资源.您的代码在访问它们时会发出大量的内存栅栏或获取/释放操作,但如果您也使用了互斥锁,那么因为互斥锁保护的代码块与观察到的更新顺序相同线程.