對象監視器


監視器是一種同步結構,它基於互斥鎖,允許線程同時互斥(使用鎖)和協作,

互斥

當一個線程訪問受保護的數據時,如果沒有其他線程在等待,線程獲取鎖並繼續執行。當線程完成執行時,它釋放鎖並退出監視器。

但如果此時另一個線程已經擁有監視器時,它必須在entry-set中等待。當前面的線程執行完畢退出監視器時,新到達的線程必須與在入口集中等待的其他線程競爭。只有一個線程能贏得競爭並擁有鎖。

 

協作

當一個線程需要數據在某一個狀態下它才能執行,那么另一個線程負責將數據改變到此狀態,

常見的如生產者/消費者的問題,當讀線程需要緩沖區處於“不空”的狀態它才可以從緩沖區中讀取任何數據,如果它發現緩沖區為空,則進入wait-set等待。待寫線程用數據填充緩沖區,再通知讀線程進行讀取。這種機制被稱為“Wait and Notify”或“Signal and Continue

如下圖所示:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM