可重入函数

- 不含全局变量和静态变量是可重入函数的一个要素
- 可重入函数见man 7 signal
- 在信号捕捉函数里应使用可重入函数
- 在信号捕捉函数里禁止调用不可重入函数
例如:strtok就是一个不可重入函数,因为strtok内部维护了一个内部静态指针,保存上一 次切割到的位置,如果信号的捕捉函数中也去调用strtok函数,则会造成切割字符串混乱, 应用strtok_r版本,r表示可重入。
信号引起的竞态和异步I/O
时序竞态
-  int pause(void)- 使调用进程挂起,直到有信号递达,如果递达信号是忽略,则继续挂起
 
-  int sigsuspend(const sigset_t *mask)- 以通过指定mask来临时解除对某个信号的屏蔽,
- 然后挂起等待,
- 当被信号唤醒sigsuspend返回时,进程的信号屏蔽字恢复为原来的值
 
mysleep实现,这种实现方式是否存在BUG?
#include <unistd.h> 
#include <signal.h> 
#include <stdio.h>
void sig_alrm(int signo) {/* nothing to do */ 
}
unsigned int