什麼是條件變數(Condition variable)
讓執行緒休眠直到某個條件成立,並由其他執行緒的通知喚醒的同步機制。被喚醒後要重新確認條件。
日文名稱: 条件変数
「條件變數(Condition variable)」出現在1領域的1道練習題中(多核心與同步等)。
這個名詞所屬的領域: 多核心與同步
讓執行緒休眠直到某個條件成立,並由其他執行緒的通知喚醒的同步機制。被喚醒後要重新確認條件。
日文名稱: 条件変数
「條件變數(Condition variable)」出現在1領域的1道練習題中(多核心與同步等)。
這個名詞所屬的領域: 多核心與同步
正確答案:C. 因為即使被喚醒,也可能被其他執行緒搶先取走,或無緣無故醒來,導致條件並未滿足
條件變數的等待,是先放開鎖並休眠,收到通知醒來後再重新取得鎖才返回。然而在醒來之前,其他執行緒可能先取得鎖並取走佇列的元素。此外,因實作上的考量,也允許在沒有通知的情況下醒來(虛假喚醒,spurious wakeup)。因此,醒來後要確認條件,若不滿足就再次等待,所以要寫成while敘述。
條件變數的等待,是先放開鎖並休眠,收到通知醒來後再重新取得鎖才返回。
以條件變數(condition variable)「等到佇列不為空」時,被喚醒後之所以用while敘述而非if敘述重新…互斥鎖(Mutex) 比較並交換(Compare-and-swap) 目錄式一致性(Directory-based coherence) 交易式記憶體(Transactional memory) 死結(Deadlock) 自旋鎖(Spinlock) 屏障同步(Barrier synchronization) 原子指令(Atomic instruction) 記憶體一致性模型(Memory consistency model) 記憶體屏障(Memory barrier)