为什么只应该从信号处理程序调用异步安全函数? [英] Why only async-safe functions should be called from a signal handler?

查看:14
本文介绍了为什么只应该从信号处理程序调用异步安全函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

推荐答案

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

Open Group Base Specification第7版(POSIX.1-2008)在其对"Signal Concepts"的处理中写道:

[W]当信号中断不安全功能时.并且信号捕获函数调用了不安全的函数,则行为未定义。

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

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

这篇关于为什么只应该从信号处理程序调用异步安全函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆