zoukankan      html  css  js  c++  java
  • 第二十三篇:信号机制的两个思考

    前言

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

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

    思考一:中断的系统调用

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

    结论

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

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

           

    思考二:可重入函数

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

    结论

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

           

  • 相关阅读:
    使用SpringAOP
    Alpha 冲刺 (5/10)
    Alpha 冲刺 (4/10)
    Alpha 冲刺 (3/10)
    Alpha 冲刺 (2/10)
    Alpha 冲刺 (1/10)
    项目需求分析答辩总结
    项目UML设计(团队)
    项目选题报告答辩总结
    第七次作业--项目需求分析
  • 原文地址:https://www.cnblogs.com/muchen/p/6354587.html
Copyright © 2011-2022 走看看