條件變量的虛假喚醒(spurious wakeups)問題

引言 條件變量是我們常用的同步原語之一,它的正確使用方式一般如下圖: 在wait端,我們必須把判斷布爾條件和wait()放到while循環中,而不能用if語句,原因是可能會引起虛假喚醒。 那麼,究竟什麼是虛假喚醒,導致虛假喚醒的原因又是什麼呢? 什麼是虛假喚醒? 舉個例子,我們現在有一個生產者-消費者隊列和三個線程。 1) 1號線程從隊列中獲取了一個元素,此時隊列變爲空。 2) 2號線程也想從隊列
相關文章
相關標籤/搜索