- 写的程序稍微大型一点就容易碰到死锁,这里记录一下产生死锁可能的原因。
1. signal函数。
void handler(int n) {
elog(ERROR, "Message.\n");
}
int main() {
signal(SIGINT, handler);
while(1) {
printf("something.\n");
sleep(1);
}
return 0;
}
signal函数中指定的handler 是一个异步执行函数,当主程序捕捉到alarm发出的信号时程序会中断并进入用户自定义的handler函数。如果handler里面调用了某些会加锁的函数比如malloc, free,这就可能会与中断前的malloc产生锁冲突,造成死锁。