C++ 如果没有线程在等待并且发送了条件信号,会发生什么?
如果所有线程都忙,并且主线程发送了线程cond信号,会发生什么情况 线程池中有1个主线程和3个pthread。3个pthread的状态为C++ 如果没有线程在等待并且发送了条件信号,会发生什么?,c++,pthreads,C++,Pthreads,如果所有线程都忙,并且主线程发送了线程cond信号,会发生什么情况 线程池中有1个主线程和3个pthread。3个pthread的状态为 pthread_mutex_lock(&sync_mutex); pthread_cond_wait(&sync_cond, &sync_mutex); pthread_mutex_unlock(&sync_mutex); 主线程已发送信号以唤醒线程以处理工作。在这种情况下,如果3个线程已经忙了,下一个
pthread_mutex_lock(&sync_mutex);
pthread_cond_wait(&sync_cond, &sync_mutex);
pthread_mutex_unlock(&sync_mutex);
主线程已发送信号以唤醒线程以处理工作。在这种情况下,如果3个线程已经忙了,下一个信号已经到达怎么办?什么都没有。信号消失。如果您使用以下功能之一:
pthread_cond_signal
-重新启动等待条件变量cond的一个线程。
pthread\u cond\u broadcast
-唤醒指定条件变量阻止的所有线程
手册上说
pthread_cond_broadcast()和pthread_cond_signal()函数
如果当前没有螺纹堵塞,则不会产生任何影响
康德
如果没有人在等待信号,信号将无效。或者你的意思是什么?我想知道它是否会等到线程可用时才停止,那么为了避免这种情况,你有什么建议来解决这个问题吗?如果你想记录信号的次数/计数,即使没有任何东西在等待,也要使用信号量。信号量具有计数、condvars事件等。不具有。信号量。。我会查一查的,谢谢。使用一个简单的队列来存储事件,并在线程可用时从中退出队列,怎么样?@Jae:condition变量表示条件发生了变化。接收线程必须等待条件变量,直到满足条件,这在使用队列时意味着等待,直到队列不为空(请参阅)。