是sig_atomic_t和std :: atomic<>互换?

时间:2013-04-11 12:39:45

标签: c++ signals atomic

根据标题。我可以在信号处理程序中使用std::atomic<>,还是sig_atomic_t提供其他编译器功能?

1 个答案:

答案 0 :(得分:15)

n3376 1.9 / 6

当抽象机器的处理被接收到信号中断时,对象的值就是这样 不是

- 类型为volatile std :: sig_atomic_t,

- 无锁原子对象(29.4)

在执行信号处理程序期间未指定

,并且任何对象的值都不在任何一个中 处理程序修改的这两个类别变为未定义。

无锁29.4 / 1,2

ATOMIC _..._ LOCK_FREE宏指示相应原子类型的无锁属性 已签名和未签名的变体组合在一起。该属性也适用于相应的(部分) 原子模板的特化。值为0表示类型永远不会无锁。价值 1表示类型有时是无锁的。值为2表示类型始终是无锁的。

函数 atomic_is_lock_free (29.6)表示对象是否无锁。在任何给定的程序中 执行时,无锁查询的结果应对所有相同类型的指针保持一致。