作業系統鎖

General 更新 2024年05月18日

  作業系統的鎖機制能夠保證多執行緒平穩執行。下面由小編為大家整理了作業系統的鎖的相關知識,希望對大家有幫助!

  機制說明

  在多執行緒程式設計中,作業系統引入了鎖機制。通過鎖機制,能夠保證在多核多執行緒環境中,在某一個時間點上,只能有一個執行緒進入臨界區程式碼,從而保證臨界區中操作資料的一致性。

  所謂的鎖,可以理解為記憶體中的一個整型數,擁有兩種狀態:空閒狀態和上鎖狀態。加鎖時,判斷鎖是否空閒,如果空閒,修改為上鎖狀態,返回成功;如果已經上鎖,則返回失敗。解鎖時,則把鎖狀態修改為空閒狀態。

  加鎖過程用如下偽碼錶示:

  1、read lock;

  2、判斷lock狀態;

  3、如果已經加鎖,失敗返回;

  4、把鎖狀態設定為上鎖;

  5、返回成功。

  雖然每一步是原子性的,但是每一步之間卻是可以中斷的。比如程序A在執行完2後發生中斷,中斷中程序B也執行了加鎖過程,返回中斷後就會發生兩個程序都會加鎖。

  對於這個問題,計算機已經解決,方法是採用原子級彙編指令test and set 和swap。

  參考:作業系統死鎖的相關知識

  死鎖的概念.

  死鎖: 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去.此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序.

  比如 兩隻羊過獨木橋。程序比作羊,資源比作橋。若兩隻羊互不相讓,爭著過橋,就產生死鎖。

  死鎖的原因.

  主要原因***1*** 因為系統資源不足。***2*** 程序執行推進的順序不合適,保證有先後順序。***3*** 資源分配不當等。

  死鎖的必要條件.

  產生死鎖的四個必要條件:

  ***1*** 互斥條件:一個資源每次只能被一個程序使用。

  ***2*** 請求與保持條件:一個程序因請***而阻塞時,對已獲得的資源保持不放。

  ***3*** 不剝奪條件: 程序已獲得的資源,在末使用完之前,不能強行剝奪。

  ***4*** 迴圈等待條件:若干程序之間形成一種頭尾相接的迴圈等待資源關係。存在一個程序等待序列{P1,P2,…,Pn},其中P1等待P2所佔有的某一資源,P2等待P3所佔有的某一 源,……,而Pn等待P1所佔有的的某一資源,形成一個程序迴圈等待環。

  這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死鎖。

  解決死鎖的四個方式.

  1***忽略該問題。例如鴕鳥演算法,該演算法可以應用在極少發生死鎖的的情況下。為什麼叫鴕鳥演算法呢,***鴕鳥策略***

  2***檢測死鎖並且恢復。***檢測與解除策略***

  3***仔細地對資源進行動態分配,以避免死鎖。***避免策略***

  4***通過破除死鎖四個必要條件之一,來防止死鎖產生。***預防策略***

  C++多執行緒開發中,容易出現死鎖導致程式掛起的現象。

  解決步驟分為三步:

  1、檢測死鎖執行緒。

  2、列印執行緒資訊。

  3、修改死鎖程式。

作業系統鎖的種類
作業系統四種排程演算法
相關知識
作業系統鎖有哪幾種分類
作業系統鎖的種類
作業系統鎖
作業系統死鎖產生的必要條件是什麼
作業系統為什麼會出現死鎖
作業系統死鎖原理是什麼怎麼解決
作業系統死鎖銀行家演算法
作業系統死鎖檢測演算法
作業系統死鎖的危害
作業系統死鎖的必要條件