• Operating System Video Tutorials

同步中的互斥



什麼是互斥?

互斥意味著在任何時間只有一個程序可以處於臨界區。如果其他程序需要在其臨界區執行,則必須等待直到臨界區空閒。

當多個程序想要訪問或更新共享資源,即進入其臨界區時,如果它們同時執行,則可能發生競爭條件,從而導致不一致的結果。為了避免競爭條件,程序同步技術應滿足互斥標準。

解釋

程序通常需要執行諸如訪問或更新共享資源(如公共變數、索引表或共享檔案)之類的操作。當程序這樣做時,據說它正在其臨界區執行。在臨界區,如果正在執行的程序被另一個以不同方式更新共享資源的程序中斷,則會發生競爭條件,並且共享資源的值將變得無效。

同步機制是確保程序以某種方式執行的技術,以便系統狀態和公共資料結構始終保持一致。為了避免競爭條件,同步技術確保臨界區中操作的指令以單個單元(即原子方式)執行。原子性透過互斥來保證,透過互斥,在特定時間只有一個程序可以在臨界區執行。

互斥的先決條件

  • 在任何特定時間,只有一個程序可以進入其臨界區。
  • 程序只有在其臨界區執行有限的時間才被允許。
  • 任何程序(不在其臨界區)都不能阻止另一個程序進入其臨界區。
  • 任何程序都不應無限期地等待進入其臨界區。

同步中互斥的技術

互斥可以透過多種策略實現,例如以下策略:

鎖 / 互斥量

稱為鎖或互斥量(mutual exclusion 的簡稱)的同步原語用於維護共享資源的值或狀態的一致性。鎖有兩種可能的狀態:鎖定和解鎖。作業系統或過程必須在能夠使用共享資源之前獲得鎖。如果鎖已被另一個執行緒鎖定,則請求的執行緒將被阻止,直到鎖被釋放。

訊號量

訊號量是一種高階同步工具。它使用兩個原子操作,“wait()”和“signal()”。wait() 指令用於入口段以獲取對臨界區的訪問許可權,而 signal() 操作用於釋放對共享資源的控制。訊號量可以分為兩種型別:二進位制訊號量和計數訊號量。在計數訊號量中,當執行緒需要進入臨界區時,訊號量跟蹤一個計數器並將其遞減。如果計數器遞減,則正在執行的執行緒將被阻塞,這表示臨界區已在使用中。

原子操作

在不使用鎖或訊號量的情況下,某些處理器提供可以用來保證互斥的原子操作。原子操作對於修改共享引數很有用,因為它們是不可中斷的,並且不能被阻止。例如,僅當變數的值與預期值一致時,才能使用原子比較並交換 (CAS) 過程更改變數的屬性。

基於軟體的技術

互斥可以使用各種基於軟體的演算法和策略來實現,包括 Peterson 演算法、Dekker 演算法或 Lamport 麵包店演算法。這些技術透過結合標誌、標誌和忙等待來保證一次只有一個執行緒能夠使用關鍵元件。

同步中互斥的實際例項

一些在現實生活中可能發生的同步中互斥的例項:

印表機後臺列印

在具有多個使用者的作業系統中,多個程序或使用者可能同時請求列印文件。互斥用於確保一次只有一個程序可以訪問印表機。鎖或訊號量用於提供對印表機的受限訪問、避免衝突並確保列印作業按正確的順序處理。

銀行賬戶交易

在電子銀行系統中,許多人可能同時嘗試訪問和修改其財務賬戶。需要互斥以避免諸如超載或賬戶不一致等問題。鎖或其他同步原語允許一次只有一個事務訪問特定銀行賬戶,從而維護資訊的機密性和避免衝突。

交通訊號控制

人行橫道處的交通訊號必須協調以安全地管理車輛的通行。使用互斥來避免來自競爭通訊的多個訊號同時顯示。互斥規則允許一次只顯示一個訊號,從而促進高效和有序的交通流程。

共享資料庫中的資源分配

在資料庫系統中,多個程序或事務併發訪問共享資料時,互斥對於維護資料一致性至關重要。例如,互斥機制確保一次只有一個事務能夠修改相同的資料,從而在兩個單獨的操作嘗試同時修改相同資料時,防止衝突並維護資料完整性。

在即時系統中訪問共享記憶體

在即時系統中,操作或過程需要共享記憶體來促進互動或協作時,需要互斥。使用鎖或訊號量等同步基本功能來保護重要的共享記憶體區域,確保一次只有一個任務能夠使用和修改共享記憶體區域。

廣告