2

讓我們來看看下面的代碼。 假設一個線程看到準備好 = false,因此等待條件變量* mv_cv *,因此釋放互斥量* my_mutex *並將自己置於睡眠狀態。 一段時間後,虛假地將線程喚醒,而準備好仍然保留值爲false。我的問題是: 線程現在是否在喚醒之前通過重新獲取互斥鎖來保持互斥鎖* my_mutex *?線程是否存在虛假喚醒的相應互斥量?

pthread_mutex_lock(&my_mutex); 

while (!ready) 
{ 
     pthread_cond_wait(&my_cv, &my_mutex); 
} 

//some operation goes here 

pthread_mutex_unlock(&my_mutex); 

回答

3

是的。虛假喚醒是一種成功的回報,並且後置條件(重新獲得互斥鎖)將得以實現。

+0

賀'虛假的喚醒是一種成功的回報'。我明白你在說什麼,但它仍然聽起來像是在文件系統文檔中的警告:「注 - 可能偶爾打開錯誤的文件。 –