信号处理函数
信号的本质
- 是一种软中断,中断有优先级,信号也有优先级
- 信号处理函数类似于中断处理函数
- 信号也可以随时打断当前正在运行的程序,去运行信号处理函数
编程要点
-
重入:可能在任何时刻、任意地点打断当前进程的执行
-
尽量不要在处理函数中修改全局数据
-
尽量使用可重入函数,被打断的进程可能正在调用不可重入函数
-
难点:很难写出一个安全地、可重入的信号处理函数
int sum; int add(int count) { static int sum = 0; for(i from 0 to count) sum = sum + i; }
可重入函数
函数的可重入
- 可重复调用、并发调用、可以被中断
- 在多任务环境中,多次调用,不影响运行结果
- 一般应用在多任务、多进程的运行环境中
可重入与线程安全
- 可重入函数一定是线程安全的
- 不可重入函数通过加锁访问全局变量,也是线程安全的。但仍是不可重入的
- 如果一个函数对信号处理来说是可重入函数,则称其为异步信号安全函数,可重入函数跟信号安全函数可以看做等价的
- 线程安全的函数,不