当前位置: 技术问答>linux和unix
linux 信号问题
来源: 互联网 发布时间:2016-09-29
本文导语: 程序退出时,主线程发送pthread_cond_breadcast信号通知所有线程退出,处在等待状态(即已经调用pthread_cond_wait接口)的线程收到主线程的信号后能立即退出,但有的线程还在处理逻辑事物,还没有进行等待(即还没有调...
程序退出时,主线程发送pthread_cond_breadcast信号通知所有线程退出,处在等待状态(即已经调用pthread_cond_wait接口)的线程收到主线程的信号后能立即退出,但有的线程还在处理逻辑事物,还没有进行等待(即还没有调用pthread_cond_wait接口),此时会出现唤醒信号丢失现象。请问怎么避免这样的现象!
|
感觉你的使用方法不太对。
pthread_cond_breadcast函数唤醒所有被pthread_cond_wait函数阻塞在某个条件变量上的线程。
这个条件变量一般用来对某些临界资源的加锁。一些线程使用pthread_cond_wait来试图获取临界资源,其中一些线程能获取临界资源,而另外一些线程不能获取。那么不能获取的线程就会阻塞在pthread_cond_wait上。
获取到临界资源的线程使用完临界资源后,使用pthread_cond_breadcast来唤醒阻塞的在pthread_cond_wait上的所有线程。然后让它们重新争夺临界资源。
如果本身就没有被阻塞在pthread_cond_wait上的线程,没有必要让pthread_cond_breadcast唤醒。因为它们不存在再次争夺临界资源的问题。
pthread_cond_breadcast函数唤醒所有被pthread_cond_wait函数阻塞在某个条件变量上的线程。
这个条件变量一般用来对某些临界资源的加锁。一些线程使用pthread_cond_wait来试图获取临界资源,其中一些线程能获取临界资源,而另外一些线程不能获取。那么不能获取的线程就会阻塞在pthread_cond_wait上。
获取到临界资源的线程使用完临界资源后,使用pthread_cond_breadcast来唤醒阻塞的在pthread_cond_wait上的所有线程。然后让它们重新争夺临界资源。
如果本身就没有被阻塞在pthread_cond_wait上的线程,没有必要让pthread_cond_breadcast唤醒。因为它们不存在再次争夺临界资源的问题。