由於Java提供的用戶級線程,這使得在Java中我們可以看到更多的關於線程的東西。
最近看操作系統,在生產者消費者模型中,經典的信號量、互斥量解決方式之外,還有一種管程的解決方案。管程實際上是比信號量更高級的一種同步原語。
發現在《現代操作系統》p79頁中用管程實現生產者消費者問題的解法時,所用的管程不就是之前遇到過的阻塞隊列解決方式嗎?
再回頭看之前的 這篇博文最後一部分代碼,發現兩者本質上沒有差別,這裏的queue就是完成了一個管程的功能。管程包含了共享的緩衝區,還有同步方法(區別在於阻塞隊列採用顯示鎖完成同步,本質上沒啥區別)。通過該queue(管程)保證對共享緩衝區的兩類操作是互斥的。
思考:這兩種方案爲什麼驚人的相似,應該是java參考了操作系統中的解決方式吧,畢竟操作系統中的方案是系統的並不針對哪門語言,這種相似並不是巧合!這種解決方式的核心思想就是把互斥操作包裝起來,由一個東西(或者叫對象?)去統一管理。