Java阻塞隊列與管程

由於Java提供的用戶級線程,這使得在Java中我們可以看到更多的關於線程的東西。

最近看操作系統,在生產者消費者模型中,經典的信號量、互斥量解決方式之外,還有一種管程的解決方案。管程實際上是比信號量更高級的一種同步原語。

發現在《現代操作系統》p79頁中用管程實現生產者消費者問題的解法時,所用的管程不就是之前遇到過的阻塞隊列解決方式嗎?

再回頭看之前的 這篇博文最後一部分代碼,發現兩者本質上沒有差別,這裏的queue就是完成了一個管程的功能。管程包含了共享的緩衝區,還有同步方法(區別在於阻塞隊列採用顯示鎖完成同步,本質上沒啥區別)。通過該queue(管程)保證對共享緩衝區的兩類操作是互斥的。

思考:這兩種方案爲什麼驚人的相似,應該是java參考了操作系統中的解決方式吧,畢竟操作系統中的方案是系統的並不針對哪門語言,這種相似並不是巧合!這種解決方式的核心思想就是把互斥操作包裝起來,由一個東西(或者叫對象?)去統一管理。

發佈了59 篇原創文章 · 獲贊 9 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章