2012-03-07 62 views
2

如果所有线程都忙且主线程已发送线程cond信号,会发生什么情况?如果没有线程正在等待并发送条件信号,会发生什么情况?

1主线程和线程池中的3个pthread。 3个pthread在

pthread_mutex_lock(&sync_mutex); 
    pthread_cond_wait(&sync_cond, &sync_mutex); 
    pthread_mutex_unlock(&sync_mutex); 

主线程的状态已发送信号唤醒线程来处理工作。在这种情况下,如果3个线程已经占线并且下一个信号到达了,该怎么办?

+0

如果没有人等待信号,信号将不起作用。或者你是什么意思? – 2012-03-07 08:32:56

+0

我想知道它是否等到一个线程可用 – 2012-03-07 08:43:03

回答

6

什么都没有。信号消失。

+0

谢谢,那么为避免这种情况,你有任何建议来解决这个问题吗? – 2012-03-07 09:08:54

+2

如果您想要记录信号的次数/次数,即使没有任何等待,请使用信号量。信号量有计数,condvars事件等不。 – 2012-03-07 09:14:45

+0

信号量..我会检查它谢谢。当线程可用时,使用一个简单的队列来存储事件并将其从队列中取出 – 2012-03-07 09:17:25

4

如果您使用下列功能之一:

pthread_cond_signal - 重新启动所有正在等待条件变量COND一个线程。 pthread_cond_broadcast - 唤醒所有被指定的条件变量阻塞的线程。

手册表明

的调用pthread_cond_broadcast()和调用pthread_cond_signal()函数 应没有任何效果,如果没有当前被阻塞上 COND线程。

+0

谢谢你的回复 – 2012-03-07 09:18:01

相关问题