【发布时间】:2013-04-03 15:54:51
【问题描述】:
根据标题。我可以在信号处理程序中使用std::atomic<> 还是sig_atomic_t 提供其他编译器功能?
【问题讨论】:
根据标题。我可以在信号处理程序中使用std::atomic<> 还是sig_atomic_t 提供其他编译器功能?
【问题讨论】:
n3376 1.9/6
当抽象机的处理因收到信号而中断时,对象的值 都不是
——类型为 volatile std::sig_atomic_t nor
——无锁原子对象 (29.4)
在信号处理程序执行期间未指定,并且任何对象的值都不在任何一个中 处理程序修改的这两个类别变得未定义。
无锁 29.4/1,2
ATOMIC_..._LOCK_FREE 宏表示相应原子类型的无锁属性,其中 有符号和无符号变体组合在一起。这些属性也适用于相应的(部分) 原子模板的特化。值 0 表示这些类型从不无锁。一个值 1 表示这些类型有时是无锁的。值 2 表示类型始终是无锁的。
atomic_is_lock_free函数(29.6)表示对象是否是无锁的。在任何给定的程序中 执行时,对于所有同类型的指针,无锁查询的结果应该是一致的。
【讨论】:
std::atomic<T> x; 变量如果 x.is_lock_free() 为真。