根据标题,我能否在信号处理程序中使用
std::atomic<>
,还是sig_atomic_t
提供其他编译器功能?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)指示对象是否是无锁的。在任何给定的程序执行中,无锁查询的结果对于同一类型的所有指针应保持一致。
x.is_lock_free()
为真,你可以使用std::atomic<T> x;
变量。 - R. Martinho Fernandes