【发布时间】:2017-09-22 00:02:25
【问题描述】:
我知道,从信号处理函数sigaction() 我应该只调用那些“异步安全”的函数。但为什么会这样?
【问题讨论】:
标签: signals sigaction async-safe
我知道,从信号处理函数sigaction() 我应该只调用那些“异步安全”的函数。但为什么会这样?
【问题讨论】:
标签: signals sigaction async-safe
调用不安全的函数可能会导致未定义的行为。
开放组基本规范第 7 期 (POSIX.1-2008) 在处理 "Signal Concepts" 时说:
[当一个信号中断一个不安全的函数......并且信号捕获函数调用一个不安全的函数时,行为是未定义的。
至于为什么不安全的函数是不安全的,在给定的实现中可能有很多原因。
但是,该标准的先前版本第 6 版 (POSIX.1-2004) 暗示了某些实现的一个可能原因。该版本将异步信号安全功能描述为"either reentrant or non-interruptible by signals"。因此,考虑一个依赖静态数据来保持状态但在执行过程中自行中断的函数——一旦控制权返回到被中断的函数,该数据是否可信?
【讨论】: