有很多原子 a good/bad 吗?

Is having a lot of atomics a good/bad?

这个问题与我的有关。我做了一些测试,发现让数组充满原子比我以前使用互斥体的方法快得多。但是拥有数百万个可以吗?也许有些事情我根本不知道?

原子内部函数的存储没有什么特别之处。它的特别之处在于:

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

  2. 编译器(实际上是处理器)不允许 re-order 指令,因此释放操作发生在存储操作之前,这不是作者的意图(反之亦然) .

一百万 std::atomic<int>s 消耗的资源不会超过表示它们所需的内存。您的代码在访问它们时会发出大量内存栅栏或 acquire/release 操作,但如果您也使用了互斥锁,它就会发生,因为受互斥锁保护的代码块具有相同的限制 vis-a-vis 观察到的顺序跨线程更新。