作業系統中訊號量和監視器的區別


訊號量監視器都是作業系統中程序同步工具。訊號量和監視器允許不同的程序以互斥的方式使用共享資源,但它們彼此之間存在差異。訊號量和監視器之間的基本區別在於,訊號量是一個整數變數,而監視器是一個抽象資料型別。

閱讀本文以瞭解更多關於訊號量和監視器的資訊,以及它們之間是如何不同的。

什麼是訊號量?

訊號量是一種程序同步工具。它本質上是一個整數變數,用“S”表示。此變數“S”的初始化是透過賦值一個等於系統中存在的資源數量的數字來完成的。

有兩個函式,wait()signal(),用於修改訊號量“S”的值。wait()signal() 函式以不可分割的方式更改訊號量“S”的值。這意味著,當一個程序正在更改訊號量“S”的值時,另一個程序不能同時更改訊號量的值。

在作業系統中,訊號量分為兩類:計數訊號量二元訊號量。在計數訊號量中,訊號量的值初始化為系統中存在的資源數量。另一方面,在二元訊號量中,訊號量“S”的值為“0”或“1”。

什麼是監視器?

監視器也是一種程序同步工具。它是一種抽象資料型別,用於程序的高階同步。它被開發出來是為了克服在使用訊號量進行程序同步時發生的定時錯誤。由於監視器是一種抽象資料型別,因此它包含共享資料變數。這些資料變數將由所有程序共享。因此,這允許程序以互斥的方式執行。

在監視器中,一次只能有一個程序處於活動狀態。如果任何其他程序嘗試訪問監視器中的共享變數,它將被阻塞並排隊等待訪問資料。這是由監視器中的“條件變數”完成的。條件變數用於提供額外的同步機制。

作業系統中訊號量和監視器的區別

下表突出顯示了作業系統中訊號量和監視器之間所有重要的區別:

序號 訊號量 監視器
1. 它是一個整數變數。 它是一個抽象資料型別。
2. 此整數變數的值表示系統中可用的共享資源數量。 它包含共享變數。
3. 當任何程序訪問共享資源時,它會在訊號量上執行“等待”操作(使用 wait 方法)。 它還包含一組對共享變數進行操作的過程。
4. 當一個程序釋放共享資源時,它會在訊號量上執行“訊號”操作(使用 signal 方法)。 當一個程序希望訪問監視器中的共享變數時,它必須使用過程來執行此操作。
5. 它沒有條件變數。 它有條件變數。

結論

訊號量和監視器都是作業系統中的程序同步工具,但它們彼此之間存在很大差異,如上表所示。您應該注意到的最顯著的區別是,訊號量是一個整數變數,指示系統中可用的資源數量,而監視器是一個抽象資料型別,一次只允許一個程序執行。

更新於: 2022-12-21

8K+ 閱讀量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告