码迷,mamicode.com
首页 > 其他好文 > 详细

第二十三篇:信号机制的两个思考

时间:2017-01-28 22:53:54      阅读:377      评论:0      收藏:0      [点我收藏+]

标签:选项   方法   终端   带来   可重入函数   png   程序   使用   img   

前言

       前文介绍了最基本的信号接收和处理,但这有无可能带来一些问题呢?

       本文将通过两个思考,来分析可能带来的问题以及解决方法。

思考一:中断的系统调用

       如果用户正在执行系统调用,如 write read。如果这个时候程序跳转到了信号处理函数后返回,则是否重新执行这个系统调用

结论

       这要分情况讨论:如果是磁盘 I/O 的系统调用,则自然需要自动重启;而如果是终端 I/O,则不需要自动重启。

       在信号函数族中,有很多函数都是支持设置是否重启选项的。当然,用户也可以使用类似下面的代码自行实现重启:

       技术分享

思考二:可重入函数

       有些函数需要使用系统资源,比如 malloc 需要使用内存资源,那么当某个函数正在调用 malloc 的时候,如果系统进入了信号处理函数,而在这个处理函数中,如果再调用了 malloc,是不是会破坏掉原来函数中的数据呢?

结论

       是的。因此,需要区分可重入函数和非可重入函数。下图中出现的函数都是可重入函数,没有在图中出现的则是非可重入函数:

       技术分享

第二十三篇:信号机制的两个思考

标签:选项   方法   终端   带来   可重入函数   png   程序   使用   img   

原文地址:http://www.cnblogs.com/muchen/p/6354587.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!