为什么is_lock_free是成员函数?

时间:2012-05-02 03:59:04

标签: c++ c++11 std atomic

为什么is_lock_free需要一个实例(它是一个成员函数)的原因是什么?为什么不是类型的元函数,或静态constexpr成员函数?

我正在寻找一个必要的实际例子。

1 个答案:

答案 0 :(得分:23)

该标准允许某种类型有时无锁。

  

第29.4节无锁属性

     

ATOMIC _..._ LOCK_FREE宏指示了它的无锁属性   相应的原子类型,带有有符号和无符号的变体   组合在一起。属性也适用于相应的   (部分)原子模板的特化。值为0   表示类型永远不会无锁。 值为1表示   这些类型有时是无锁的。值为2表示   类型总是无锁。

C++ atomic paper n2427说明背后的原因:

  

...该提案提供了运行时无锁查询功能   比编译时常量因为a的后续实现   平台可以使用无锁操作升级锁定操作,所以   系统通常在动态之后抽象这些设施   图书馆,我们希望保持这种可能性。此外,   我们建议不使用硬件原子支持的实现   那种技术。 ...

并且(如Jesse Good所指出的那样):

  

该提议提供了对单个对象而不是整个类型的无锁查询函数,以允许不可避免地错位原子变量而不会损害对齐的原子变量的性能