【问题标题】:Are sig_atomic_t and std::atomic<> interchangable?sig_atomic_t 和 std::atomic<> 可以互换吗?
【发布时间】:2013-04-03 15:54:51
【问题描述】:

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

【问题讨论】:

    标签: c++ signals atomic


    【解决方案1】:

    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&lt;T&gt; x; 变量如果 x.is_lock_free() 为真。
    猜你喜欢
    • 1970-01-01
    • 2016-12-10
    • 2021-05-17
    • 2012-12-29
    • 2017-12-08
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    相关资源
    最近更新 更多