2016-07-14 21 views
0

我有一個死鎖的代碼。我想到的是如何解決這個問題的幾個解決方案,其中之一是做原子如下:如果條件在pthread中原子地成立,是否可以執行cond_wait?

if(!ready) 
    pthread_cond_wait(&(cond[0]), &(lock[0])); 

但是,我不知道是否有可能在並行線程原子地做到這一點,因爲我不能在文檔中找不到任何東西,也許可能有一個關於如何去做的技巧。我不會解釋代碼的其餘部分,因爲我認爲它不適合回答這個問題。

謝謝。

回答

0

由於互斥信號lock[0]被保留,所以它的原子性與ready的修改有關,並且必須在其他線程中對ready的所有修改保留。

請注意,您需要使用while而不是if,因爲即使條件沒有改變,等待可能會提前甦醒。

+0

這是真的,但我想避免讓其他線程試圖獲取鎖定[0]只是爲了設置就緒變量,因爲這意味着必須等到這個線程釋放鎖定,只有當它發生時纔會發生等待。 – fc67

+0

您只需在測試前立即將其鎖定即可。 – caf

相關問題