隨着pthread_cond_t的,我們有一個互斥體相關聯,當信號的情況我見過這樣的代碼調用pthread_cond_broadcast與互斥舉行或不?
pthread_mutex_lock(&mutex);
//code that makes condition true
pthread_cond_broadcast(&cond);
pthread_mutex_unlock(&mutex);
和
pthread_mutex_lock(&mutex);
//code that makes condition true
pthread_mutex_unlock(&mutex);
pthread_cond_broadcast(&cond);
哪一個是正確的方法是什麼? (這有什麼關係嗎?)
有同樣的問題,我找到了你的答案。我已經關注了你的鏈接,我認爲他引用的內容與前面的內容有關:「如果在一個條件變量上阻塞了多個線程,調度策略將確定線程被解除阻塞的順序。」 – wilx 2011-05-17 09:42:59
@wilx:是的,我的擔心是「不可預知的調度行爲」所允許的。例如,假設您有一個已記錄的調度程序,或者有一個選項,互斥量和條件變量選擇線程以FIFO爲基礎進行喚醒。如果「pthread_cond_signal」的調用者未持有互斥鎖,那麼「隱含」句子是否意味着該行爲不會成爲FIFO?我會這麼認爲,但我不知道「可預測」的正式定義,所以我覺得它很神祕。除了在RT系統中,我總是把時間安排看作是不可預測的,但我不希望它變得怪異。 – 2011-05-17 09:48:06
沒有已知的情況,無論您的廣播在解鎖之前還是解鎖後都很重要。如果您在解鎖後將信號移動到一個非常困難的位置,那麼可以構建破解代碼。 – 2011-08-28 12:48:43