不卡AV在线|网页在线观看无码高清|亚洲国产亚洲国产|国产伦精品一区二区三区免费视频

學(xué)習(xí)啦 > 學(xué)習(xí)電腦 > 操作系統(tǒng) > 操作系統(tǒng)基礎(chǔ)知識(shí) > 操作系統(tǒng)鎖

操作系統(tǒng)鎖

時(shí)間: 佳洲1085 分享

操作系統(tǒng)鎖

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

  操作系統(tǒng)鎖機(jī)制說(shuō)明

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

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

  加鎖過(guò)程用如下偽碼表示:

  1、read lock;

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

  3、如果已經(jīng)加鎖,失敗返回;

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

  5、返回成功。

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

  對(duì)于這個(gè)問(wèn)題,計(jì)算機(jī)已經(jīng)解決,方法是采用原子級(jí)匯編指令test and set 和swap。

  參考:操作系統(tǒng)死鎖的相關(guān)知識(shí)

  死鎖的概念.

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

  比如 兩只羊過(guò)獨(dú)木橋。進(jìn)程比作羊,資源比作橋。若兩只羊互不相讓?zhuān)瑺?zhēng)著過(guò)橋,就產(chǎn)生死鎖。

  死鎖的原因.

  主要原因(1) 因?yàn)橄到y(tǒng)資源不足。(2) 進(jìn)程運(yùn)行推進(jìn)的順序不合適,保證有先后順序。(3) 資源分配不當(dāng)?shù)取?/p>

  死鎖的必要條件.

  產(chǎn)生死鎖的四個(gè)必要條件:

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

  (2) 請(qǐng)求與保持條件:一個(gè)進(jìn)程因請(qǐng)求資源而阻塞時(shí),對(duì)已獲得的資源保持不放。

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

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

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

  解決死鎖的四個(gè)方式.

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

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

  3)仔細(xì)地對(duì)資源進(jìn)行動(dòng)態(tài)分配,以避免死鎖。(避免策略)

  4)通過(guò)破除死鎖四個(gè)必要條件之一,來(lái)防止死鎖產(chǎn)生。(預(yù)防策略)

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

  解決步驟分為三步:

  1、檢測(cè)死鎖線程。

  2、打印線程信息。

  3、修改死鎖程序。

熱門(mén)文章

3626755