管程

Sliing·發表於2020-11-17

為什麼要引入管程

1、訊號量機制存在的問題:編寫程式困難、易出錯
2、能不能設計一種機制,讓程式設計師寫程式時不需要再關注複雜的PV操作,讓寫程式碼更輕鬆呢?
3、1973年, Brinch Hansen首次在程式設計語言( Pascal)
中引入了“管程”成分。一種高階同步機制

簡介

以下這些概念看起來都很官方,很繞口,其實通俗來說,把管程理解成JAVA中的類就行了


管程是一種特殊的軟體模組,由這些部分組成:

1、區域性於管程的共享資料結構說明;
2、對該資料結構進行操作的一組過程
3、對區域性於管程的共享資料設定初始值的語句;
4、管程有一個名字

Tips:“過程”其實就是“函式”

管程的基本特徵:
1、區域性於管程的資料只能被區域性於管程的過程所訪問
2、一個程式只有通過呼叫管程內的過程才能進入管程訪問共享資料;
3、每次僅允許一個程式在管程內執行某個內部過程。

擴充1:用管程解決生產者、消費者問題

在這裡插入圖片描述

在這裡插入圖片描述

擴充2:Java中類似於管程的機制

Java中,如果用關鍵字synchronized來描述一個函式,那麼這個函式同一時間段內只能被一個執行緒呼叫
在這裡插入圖片描述

總結

在這裡插入圖片描述