当前位置: 技术问答>linux和unix
关于这个死锁的疑惑
来源: 互联网 发布时间:2017-03-21
本文导语: #include void long_running_proc() { while (a_long_time) { pthread_mutex_lock(&m); update_state(&state); pthread_mutex_unlock(&m); compute_more(); } } void handler(int signo) { pthread_mutex_lock(&m); display(&state); pthread_mutex_unlock(&m); } computation_state_t state; int main() {...
#include
void long_running_proc() {
while (a_long_time) {
pthread_mutex_lock(&m);
update_state(&state);
pthread_mutex_unlock(&m);
compute_more();
}
}
void handler(int signo) {
pthread_mutex_lock(&m);
display(&state);
pthread_mutex_unlock(&m);
}
computation_state_t state;
int main() {
void handler(int);
sigset(SIGINT, handler);
long_running_proc();
return 0;
}
这个代码是部分伪码,handler是信号处理函数,但是会触发死锁。
我不知道为什么会触发死锁,大家能不能解释一下。
谢谢。
|
因为long_running_proc()在执行时是锁住的,信号SIGINT发生后,long_running_proc的锁是没机会释放掉的。
handler执行,首先要获得锁,但是因为long_running_proc仍然拥有锁。
则handler会等待。 而不是返回。原因在此。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。