为什么is_lock_free
需要一个实例(它是一个成员函数)的原因是什么?为什么不是类型的元函数,或静态constexpr
成员函数?
我正在寻找一个必要的实际例子。
答案 0 :(得分:23)
该标准允许某种类型有时无锁。
第29.4节无锁属性
ATOMIC _..._ LOCK_FREE宏指示了它的无锁属性 相应的原子类型,带有有符号和无符号的变体 组合在一起。属性也适用于相应的 (部分)原子模板的特化。值为0 表示类型永远不会无锁。 值为1表示 这些类型有时是无锁的。值为2表示 类型总是无锁。
C++ atomic paper n2427说明背后的原因:
...该提案提供了运行时无锁查询功能 比编译时常量因为a的后续实现 平台可以使用无锁操作升级锁定操作,所以 系统通常在动态之后抽象这些设施 图书馆,我们希望保持这种可能性。此外, 我们建议不使用硬件原子支持的实现 那种技术。 ...
并且(如Jesse Good所指出的那样):
该提议提供了对单个对象而不是整个类型的无锁查询函数,以允许不可避免地错位原子变量而不会损害对齐的原子变量的性能