进程间通信(二十二)——信号处理函数

本文探讨了Linux环境下信号处理函数的核心概念,强调信号的本质是软中断,并指出处理函数应尽量短小且避免修改全局数据。重点讨论了可重入函数的特性,即在多任务环境中能安全并发调用,而不可重入函数可能导致的安全问题。建议在编写信号处理函数时选择可重入函数以确保线程安全。
摘要由CSDN通过智能技术生成

信号处理函数

信号的本质

  1. 是一种软中断,中断有优先级,信号也有优先级
  2. 信号处理函数类似于中断处理函数
  3. 信号也可以随时打断当前正在运行的程序,去运行信号处理函数

编程要点

  • 重入:可能在任何时刻、任意地点打断当前进程的执行

  • 尽量不要在处理函数中修改全局数据

  • 尽量使用可重入函数,被打断的进程可能正在调用不可重入函数

  • 难点:很难写出一个安全地、可重入的信号处理函数

     int sum;
     int add(int count)
     {
      	static int sum = 0;
    	for(i from 0 to count)
    		sum = sum + i;	 
     }
    

可重入函数

函数的可重入

  • 可重复调用、并发调用、可以被中断
  • 在多任务环境中,多次调用,不影响运行结果
  • 一般应用在多任务、多进程的运行环境中

可重入与线程安全

  • 可重入函数一定是线程安全的
  • 不可重入函数通过加锁访问全局变量,也是线程安全的。但仍是不可重入的
  • 如果一个函数对信号处理来说是可重入函数,则称其为异步信号安全函数,可重入函数跟信号安全函数可以看做等价的
  • 线程安全的函数,不
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值