zoukankan      html  css  js  c++  java
  • 信号机制的两个思考

    前言

      前文介绍了最基本的信号接收和处理,但这有无可能带来一些问题呢?本文将通过两个思考,来分析可能带来的问题以及解决方法。

    思考一:中断的系统调用

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

    结论

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

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

      

    思考二 可重入函数

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

    结论

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

      

      

  • 相关阅读:
    My SQL
    弹窗
    DBDA
    ThinkPHP验证码与文件上传
    ThinkPHP表单验证
    ThinkPHP增删改
    ThinkPHP模型(查询)
    ThinkPHP跨控制器调用方法
    Superset安装
    Presto资源组配置
  • 原文地址:https://www.cnblogs.com/scut-fm/p/3674873.html
Copyright © 2011-2022 走看看