什麼是條件變數(Condition variable)

讓執行緒休眠直到某個條件成立,並由其他執行緒的通知喚醒的同步機制。被喚醒後要重新確認條件。

日文名稱: 条件変数

「條件變數(Condition variable)」出現在1領域的1道練習題中(多核心與同步等)。

這個名詞所屬的領域: 多核心與同步

練習條件變數(Condition variable)的題目

以條件變數(condition variable)「等到佇列不為空」時,被喚醒後之所以用while敘述而非if敘述重新確認條件,其理由下列何者正確?

  1. A因為while敘述比if敘述執行得更快
  2. B因為規定if敘述不能使用條件變數
  3. C因為即使被喚醒,也可能被其他執行緒搶先取走,或無緣無故醒來,導致條件並未滿足
查看答案與解析

正確答案:C. 因為即使被喚醒,也可能被其他執行緒搶先取走,或無緣無故醒來,導致條件並未滿足

條件變數的等待,是先放開鎖並休眠,收到通知醒來後再重新取得鎖才返回。然而在醒來之前,其他執行緒可能先取得鎖並取走佇列的元素。此外,因實作上的考量,也允許在沒有通知的情況下醒來(虛假喚醒,spurious wakeup)。因此,醒來後要確認條件,若不滿足就再次等待,所以要寫成while敘述。

解析中的「條件變數(Condition variable)」

出現「條件變數(Condition variable)」的題目(1題)

  1. 以條件變數(condition variable)「等到佇列不為空」時,被喚醒後之所以用while敘述而非if敘述重新確認條件,其理由下列何者正確?

相關名詞

互斥鎖(Mutex) 比較並交換(Compare-and-swap) 目錄式一致性(Directory-based coherence) 交易式記憶體(Transactional memory) 死結(Deadlock) 自旋鎖(Spinlock) 屏障同步(Barrier synchronization) 原子指令(Atomic instruction) 記憶體一致性模型(Memory consistency model) 記憶體屏障(Memory barrier)

前往名詞解釋列表