【问题标题】:Why only async-safe functions should be called from a signal handler?为什么只能从信号处理程序调用异步安全函数?
【发布时间】:2017-09-22 00:02:25
【问题描述】:

我知道,从信号处理函数sigaction() 我应该只调用那些“异步安全”的函数。但为什么会这样?

【问题讨论】:

    标签: signals sigaction async-safe


    【解决方案1】:

    调用不安全的函数可能会导致未定义的行为。

    开放组基本规范第 7 期 (POSIX.1-2008) 在处理 "Signal Concepts" 时说:

    [当一个信号中断一个不安全的函数......并且信号捕获函数调用一个不安全的函数时,行为是未定义的。

    至于为什么不安全的函数是不安全的,在给定的实现中可能有很多原因。

    但是,该标准的先前版本第 6 版 (POSIX.1-2004) 暗示了某些实现的一个可能原因。该版本将异步信号安全功能描述为"either reentrant or non-interruptible by signals"。因此,考虑一个依赖静态数据来保持状态但在执行过程中自行中断的函数——一旦控制权返回到被中断的函数,该数据是否可信?

    【讨论】:

      猜你喜欢
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多