精品丰满熟女一区二区三区_五月天亚洲欧美综合网_亚洲青青青在线观看_国产一区二区精选

  • <menu id="29e66"></menu>

    <bdo id="29e66"><mark id="29e66"><legend id="29e66"></legend></mark></bdo>

  • <pre id="29e66"><tt id="29e66"><rt id="29e66"></rt></tt></pre>

      <label id="29e66"></label><address id="29e66"><mark id="29e66"><strike id="29e66"></strike></mark></address>
      學習啦 > 學習電腦 > 操作系統(tǒng) > 操作系統(tǒng)基礎知識 > 操作系統(tǒng)鎖

      操作系統(tǒng)鎖

      時間: 佳洲1085 分享

      操作系統(tǒng)鎖

        操作系統(tǒng)的鎖機制能夠保證多線程平穩(wěn)運行。下面由學習啦小編為大家整理了操作系統(tǒng)的鎖的相關知識,希望對大家有幫助!

        操作系統(tǒng)鎖機制說明

        在多線程編程中,操作系統(tǒng)引入了鎖機制。通過鎖機制,能夠保證在多核多線程環(huán)境中,在某一個時間點上,只能有一個線程進入臨界區(qū)代碼,從而保證臨界區(qū)中操作數(shù)據(jù)的一致性。

        所謂的鎖,可以理解為內存中的一個整型數(shù),擁有兩種狀態(tài):空閑狀態(tài)和上鎖狀態(tài)。加鎖時,判斷鎖是否空閑,如果空閑,修改為上鎖狀態(tài),返回成功;如果已經上鎖,則返回失敗。解鎖時,則把鎖狀態(tài)修改為空閑狀態(tài)。

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

        1、read lock;

        2、判斷l(xiāng)ock狀態(tài);

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

        4、把鎖狀態(tài)設置為上鎖;

        5、返回成功。

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

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

        參考:操作系統(tǒng)死鎖的相關知識

        死鎖的概念.

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

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

        死鎖的原因.

        主要原因(1) 因為系統(tǒng)資源不足。(2) 進程運行推進的順序不合適,保證有先后順序。(3) 資源分配不當?shù)取?/p>

        死鎖的必要條件.

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

        (1) 互斥條件:一個資源每次只能被一個進程使用。

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

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

        (4) 循環(huán)等待條件:若干進程之間形成一種頭尾相接的循環(huán)等待資源關系。存在一個進程等待序列{P1,P2,…,Pn},其中P1等待P2所占有的某一資源,P2等待P3所占有的某一 源,……,而Pn等待P1所占有的的某一資源,形成一個進程循環(huán)等待環(huán)。

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

        解決死鎖的四個方式.

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

        2)檢測死鎖并且恢復。(檢測與解除策略)

        3)仔細地對資源進行動態(tài)分配,以避免死鎖。(避免策略)

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

        C++多線程開發(fā)中,容易出現(xiàn)死鎖導致程序掛起的現(xiàn)象。

        解決步驟分為三步:

        1、檢測死鎖線程。

        2、打印線程信息。

        3、修改死鎖程序。

      熱門文章

      3626755