根据标题。我可以在信号处理程序中使用std::atomic<>
,还是sig_atomic_t
提供其他编译器功能?
答案 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)表示对象是否无锁。在任何给定的程序中 执行时,无锁查询的结果应对所有相同类型的指针保持一致。