2012-05-15 77 views
3
global variable 'temp'; 

**threadA** 
    -pthread_mutex_lock- 
      if (temp == 'x') 
        -pthread_cond_wait- 
        do this  
     -pthread_mutex_unlock-  

**threadB** 
    -pthread_mutex_lock- 
      if (someCondition == true)    
         temp = 'x' 
       -pthread_cond_signal- 
    -pthread_mutex_unlock- 

在我的情況我可能沒有任何循環,我只是有一個條件。所以,我想當temp =='x'時,那麼threadA應該這樣做。pthread_cond_wait沒有while循環

  • 當處理pthread_cond_wait時,循環是強制性的嗎?
  • 如果我們不需要循環,編寫代碼的另一種方式是什麼?
  • 這是編寫代碼的正確方法嗎?

回答

7

環路因爲根據http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_cond_wait.html是強制性的:

從那麼pthread_cond_timedwait()或調用pthread_cond_wait雜散喚醒(),可能會發生的功能。由於從pthread_cond_timedwait()或pthread_cond_wait()返回並不意味着這個謂詞的值,所以在返回時應該重新評估謂詞。

+1

*「可能會發生來自pthread_cond_timedwait()或pthread_cond_wait()函數的虛假喚醒。」*這是否意味着喚醒可能會自動發生而沒有任何原因? –

+2

是的,這就是標準所說的 - 一個具體的實現可能選擇實現更嚴格的語義。 – cmeerw