为什么is_lock_free是成员函数?

Pub*_*bby 14 c++ atomic std c++11

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

我正在寻找一个必要的实际情况.

use*_*2k5 23

该标准允许类型有时无锁.

第29.4条无锁属性

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

C++原子纸n2427指出背后的原因:

...该提议提供了运行时无锁查询函数而不是编译时常量,因为平台的后续实现可以使用无锁操作升级锁定操作,因此系统通常在动态库后面抽象这些工具,我们希望保持这种可能性.此外,我们建议没有硬件原子支持的实现使用该技术....

而且(正如Jesse Good指出的那样):

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