死锁debug指北

  • 写的程序稍微大型一点就容易碰到死锁,这里记录一下产生死锁可能的原因。

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产生锁冲突,造成死锁。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容