2012-03-07 63 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

相關問題