为什么is_lock_free
需要一个实例(它是一个成员函数)的原因是什么?为什么不是类型的元函数或静态constexpr
成员函数?
我正在寻找一个实际的例子来说明为什么它是必要的。
该标准允许类型有时是无锁的。
第 29.4 节无锁属性
ATOMIC_..._LOCK_FREE 宏指示相应原子类型的无锁属性,有符号和无符号变体组合在一起。这些属性也适用于原子模板的相应(部分)特化。值 0 表示这些类型从不无锁。值 1 表示这些类型有时是无锁的。值 2 表示类型始终是无锁的。
C++ 原子论文 n2427说明了背后的原因:
...该提案提供运行时无锁查询功能而不是编译时常量,因为平台的后续实现可能会使用无锁操作升级锁定操作,因此系统通常在动态库后面抽象此类设施,我们希望保持这种可能性。此外,我们建议没有硬件原子支持的实现使用该技术。...
而且(正如杰西古德指出的那样):
该提案提供了针对单个对象而不是整个类型的无锁查询函数,以允许不可避免地未对齐的原子变量,而不会影响对齐的原子变量的性能