- 论坛徽章:
- 0
|
全局的变量,锁也是全局的,都导致不可重入的
malloc最明显,不太明显的有printf fopen等
所以在信号处理中调用printf 是最明显的错误,我曾经写过一段,结果发生死锁
下面是个例子
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <sys/time.h>
void gotsig(int n)
{
printf("b");
}
int main()
{
struct itimerval value;
struct sigaction sact;
sigemptyset( &sact.sa_mask );
sact.sa_flags = 0;
sact.sa_handler = gotsig;
sigaction(SIGALRM,&sact,NULL);
value.it_interval.tv_sec = 0;
value.it_interval.tv_usec = 1000;
value.it_value.tv_sec = 0;
value.it_value.tv_usec = 1000;
setitimer(ITIMER_REAL, &value,NULL);
while(1) {
printf("a");
}
} |
|