为什么std :: atomic_is_lock_free不是静态constexpr?

Gre*_*ape 12 c++ atomic c++11

我很迷惑.实现如何才能知道类型是否仅在运行时是原子的?

Dav*_*rtz 7

编译器可能不知道代码将在哪个CPU上运行,并且CPU的无锁功能可能不同.例如,CPU可能不支持对long类型的原子操作(因此可能需要锁定),但如果系统只有一个核心,则它们可能是原子级的,因为它们不能被中断,并且没有其他核心.比赛(因此没有什么特别需要,并且类型是无锁的).

  • 如果编译器不知道CPU是否需要锁定,那么它如何保证生成的代码是无数据竞争的呢? (4认同)