




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
進程同步與互斥一、進程的并發性二、進程的互斥三、進程的同步四、同步與互斥的混合問題一、進程的并發性
程序并行性的表示:CobeginS1;S2;…;SnCoend
在多道系統中,假如有兩個進程A和B,它們要求順序執行的操作如下:進程A:a1,a2,a3,a4,…,an進程B:b1,b2,b3,b4,…,bm這兩個進程是在處理器上交替執行的,可能出現的執行序列有:a1,b1,a2,b2,…和a1,a2,b1,b2,…,等等,它們的執行在時間上是重疊的,這被稱為“可同時執行的”。在多道程序環境下,進程之間存在以下關系資源共享關系相互合作關系觀察者beginL:observealorry;count:=count+1;gotoLend;報告者beginprintcount;count:=0;end;樣例1:假定某一時刻,觀察者已記錄了N輛車,又在記錄下一輛車,此時,報告者也開始工作。與時間有關的錯誤執行順序1:(觀察者)count:=count+1;(報告者)report;(報告者)count:=0;這是正確的結果。執行順序2:(報告者)reportcount;(觀察者)count:=count+1;(報告者)count:=0;觀察者剛剛記錄的一輛車的信息丟失了
造成不正確的因素是與進程占用處理器的時間、執行的速度以及外界的影響有關。這些因素都與時間有關,所以,稱它們為“與時間有關的錯誤”樣例2:飛機航班有N個售票處,每個售票處通過終端訪問系統的公共數據區。
售票處1begin從數據單元中取出現有余票;做減1操作;把結果送回到數據單元end;售票處2begin從數據單元中取出現有余票;做減1操作;把結果送回到數據單元end;假定現有余票為1執行順序:(售票處1)從數據單元中取出現有余票;(售票處2)從數據單元中取出現有余票;(售票處1)做減1操作;(售票處1)把結果送回到數據單元;(售票處2)做減1操作;(售票處2)把結果送回到數據單元;結果是把一張票賣給了兩個顧客。
與時間有關的錯誤產生的原因:多個進程不受限制的對同一數據對象進行存取操作。二、進程的互斥
有共享資源的進程執行時出現與時間有關的錯誤,其根本原因是對共享資源的使用不受限制。進程交叉使用了共享資源從而造成了錯誤。幾個基本概念
1、臨界資源一次僅允許一個進程訪問的資源被稱為臨界資源
2、臨界區臨界區的定義:把在進程中那段訪問臨界區的代碼稱為臨界區。對臨界區管理的要求:一次最多讓一個進程進入臨界區任何一個進入臨界區的進程必須在一個有限的時間內退出臨界區。若有多個進程同時要求進入它們的臨界區,則應在有限的時間內讓其中之一進入。處理臨界區的原則:1、當無進程處于臨界區時,允許一進程立即進入臨界區2、當某一進程已進入臨界區時,其它試圖進入臨界區進程必須等待3、當某已進程離開臨界區時,若有進程等待,則允許其中之一進入臨界區4、當進程不能進入臨界區時,應立即釋放處理機,避免忙等。對臨界資源同時提出訪問請求的諸進程的執行要加以限制,以防止上述“與時間有關的錯誤”。這種對臨界資源的排它訪問稱為互斥。
早期的研究結果表明,互斥問題的解決并不是一件很簡單的事情。解決互斥問題的軟件方法假設有兩個進程Pi和Pj,共享一個臨界資源R。方法一:設置一公用整型變量turn,用于指示被允許進入臨界區的進程的編號。repeatwhiletern<>idonoop;進入臨界區turn=j;untilfalse;repeatwhiletern<>jdonoop;進入臨界區turn=i;untilfalse;該方法可以確保每次只允許一個進程進入臨界區,但不符合處理臨界區的原則1,易造成資源利用不充分。方法二:基本思想:在每一個進程訪問臨界資源之前,先查看一下臨界資源是否正被訪問。若正被訪問,則進程等待;否則進入自己的臨界區。為此,設置一個數組flag,每個元素的初值為false,表示進程未進入臨界區,進程進入臨界區后,相應標志位置為true。repeatwhileflag[j]donoop;flag[i]=true;進入臨界區flag[i]=false;untilfalse;repeatwhileflag[i]donoop;flag[j]=true;進入臨界區flag[j]=false;untilfalse;方法二可以滿足原則1,但又出現了新的問題。比如,當Pi和Pj幾乎在同時都要求進入臨界區,因而都發現對方的訪問標志為false,于是兩進程都先后進入臨界區,顯然,這不符合臨界區處理的原則2。為了解決這個問題,把標志位的含義改變為:true表示進程希望進入臨界區,即當進程要進入臨界區前,先將標志位flag置為true,表示進程已要求進入臨界區,然后再去查看另一進程的標志,若另一進程的flag標志也為true,則本進程等待,否則,本進程進入臨界區。換句話說,進程要進入臨界區,首先設置其要求進入的標志,然后,再去查看其他進程的標志。方法三:repeatflag[i]=true;whileflag[j]donoop;進入臨界區flag[i]=false;untilfalse;repeatflag[j]=true;whileflag[i]donoop;進入臨界區flag[j]=false;untilfalse;該方法可以有效地防止兩個進程同時進入臨界區,但仔細分析又可看出,該方法可能會造成兩個進程都不能進入臨界區的后果。例如,當兩個進程同時要求進入臨界區,分別將自己的標志位置為true,再去查看另一進程的標志,發現也為true,于是都等待,誰也無法進入臨界區。方法四:repeatflag[i]=true;turn=j;while[flag[j]andturn=jdonoop;進入臨界區flag[i]=false;untilfalse;假如進程Pi和Pj幾乎同時要求進入臨界區,它們分別將flag[i}]和flag[j]置為true。Pi先將turn置為j,當它執行while語句時,條件成立,故等待。但Pj會立即將turn置為i,這樣Pi就可以進入臨界區。Pi退出臨界區時會將flag[i]置為false,從而可以使Pj進入臨界區。利用軟件方法解決互斥問題有一定難度,在使用同一資源的進程數量較大時,有很大的局限性。另外一種解決互斥問題的方法是鎖機制。為臨界資源設置一個鎖w,當進程在進入臨界區之前,首先測試w的狀態。w等于1表示上鎖,該資源已被占用;w等于0表示開鎖,該資源已空閑,未被占用。Lockw:L:ifw=1thengotoLelsew:=1Unlockw:w:=0;軟件的解決方法四和鎖機制雖然可以在一定程度上解決互斥問題,但進程在等待時都需要不停地進行測試。這不滿足處理臨界區的原則4,降低了系統工作效率。信號量同步機制
一個信號量可以看成由兩個部分組成:一個是整型變量,另一個是隊列。整型變量隊列ProcedureP(VarS:Semaphore)beginS:=S–1;ifS<0thenW(S)end;ProcedureV(VarS:Semaphore)beginS:=S+1;ifS<=0thenR(S)end;P、V操作是原語操作,即它們的執行是不可中斷的。
相應地,信號量的P、V操作可以被描述如下:W(S):將當前進程掛起在信號量等待隊列上R(S):從信號量等待隊列上喚醒一個等待進程臨界區的管理一般形式:
進程Abegin…P(S);臨界區;V(S)…end;進程Bbegin…P(S);臨界區;V(S)…end;P、V操作必須合理使用,否則可能造成由于交叉使用資源而引發的錯誤。用P、V操作實現進程的互斥①用P、V操作實現車輛觀察系統的互斥將S定義為一個信號量,初值為1ProcessObserverbeginL:observealorry;P(S);count:=count+1;V(S);gotoLend;ProcessReportbeginP(S);printcount;count:=0;V(S)end;錯誤方式1:ProcessObserverbeginL:P(S);
observealorry;count:=count+1;V(S);gotoLend;降低了進程的并發程度錯誤方式2:ProcessObserverbeginL:observealorry;P(S);count:=count+1;
gotoL;V(S)end;將造成系統癱瘓。②用P、V操作實現售票系統的互斥
將S定義為信號量,初值為1,余票的數量值放在整型變量A中。PROCESSPir:integer;beginP(S);r:=A;ifr>=1thenbeginr:=r–1;A:=r;V(S);{售出一張票};endelse{售出票已售完};end;PROCESSPir:integer;beginP(S);r:=A;ifr>=1thenbeginr:=r–1;A:=r;V(S);{售出一張票};endelsebeginV(S);{售出票已售完}endend;無法退出臨界區③讀者寫者問題:規定:允許多個進程同時讀;只允許一個進程寫;當有進程讀時不允許其它進程寫。第一種方案:定義信號量:S:semaphore;初值1;定義一個整數:rs,初值0;
讀者:PROCESSReaderibeginrs:=rs+1;ifrs=1thenP(S);readfileF;rs:=rs–1;ifrs=0thenV(S);end;寫者:PROCESSWriterjbeginP(S);writefileF;V(S);end;問題:對共享變量rs訪問的程序段也是臨界區。
改進的方案:定義信號量:S,Sr:semaphore;分別為互斥訪問文件和計數變量的信號量,初值均為1;定義一個整數:rs,初值0;讀者:PROCESSReaderbeginP(Sr);rs:=rs+1;ifrs=1thenP(S);V(Sr);readfileF;P(Sr);rs:=rs–1;ifrs=0thenV(S);V(Sr);end;寫者:PROCESSWriterbeginP(S);writefileF;V(S);end;例題:試用P、V操作寫出讀者優先的同步算法。解答:定義兩個變量RC和WC,分別用于對進入臨界區的讀者和寫者進程計數。為了互斥的操作這兩個變量,需設置兩個相應的信號量RCS和WCS。為了使讀者-寫者之間和寫者-寫者之間互斥的訪問緩沖區,設置信號量S。為了阻止讀者進程和鏈接等待的寫者進程,設置信號量W。為了鏈接等待的讀者進程,設置信號量R。這樣,當有第一個寫者進程進入臨界區后,所有的試圖進入臨界區的讀者進程將被阻塞在信號量R上,而寫者進程將優先進入臨界區。讀者:PROCESSReaderbeginP(R);P(W);P(RCS);ifRC=0thenP(S);RC:=RC+1;V(RCS);V(W);V(R);readfileF;P(RCS);RC:=RC–1;ifRC=0thenV(S);V(RCS);end;寫者:PROCESSWriterbeginP(WCS);ifWC:=0thenP(W);WC:=WC+1;V(WCS);P(S);writefileF;V(S);P(WCS);WC:=WC–1;ifWC=0thenV(W);V(WCS);end;R:=W:=RCS:=WCS:=S:=1;RC:=WC:=0;例題:舉例說明P、V操作為什么要被設計成原語(即對同一信號量上的操作必須互斥)。解答:對于P操作,過程為:ProcedureP(VarS:Semaphore)beginS:=S–1;ifS<0thenW(S)end;假如有兩個進程P1、P2幾乎在同時作P操作,信號量S的初值為1。如果進程P1先作P操作,則S的值為0,P1進程不應被阻塞(或掛起)。但是,如果P操作不是原語操作,則可能有如下執行順序:P1:S:=S-1P2:S:=S-1P1:ifS<0thenW(S)由于此時S為–1,P1將被阻塞,這樣,P操作就不符合原來的語義了。同樣,對于V操作,過程為:ProcedureV(VarS:Semaphore)beginS:=S+1;ifS<=0thenR(S)end;假如有兩個進程P1、P2幾乎在同時作V操作,信號量S的初值為-1。如果進程P1先作V操作,則S的值為0,該V操作應該喚醒一個被P操作阻塞的進程。但是,如果V操作不是原語操作,則可能有如下執行順序:P1:S:=S+1P2:S:=S+1P1:ifS<=0thenR(S)由于此時S為1,P1所作的V操作將不再去喚醒被阻塞的進程,這樣,V操作就不符合原來的語義了。
另外,如果在P操作過程中插入了V操作,也會出現不符合語義的情況。例如,假定S的值為0,按照P操作的語義,作P操作的進程應該被阻塞,但是,如果有如下執行順序:A進程的P操作語句:S:=S-1B進程的V操作語句:S:=S+1A進程的P操作語句:ifS<0thenW(S)
則作P操作的進程將不會被阻塞,這不符合語義。三、進程的同步
協作
buffer1buffer2輸入設備打印設備輸入進程計算進程打印進程P1P2P3這里,計算進程C和打印進程P的工作必須相互協作:計算進程只有在緩沖區中無數據時才能向其寫入數據;打印進程只有在緩沖區中已有數據時才能將從中取出并打印。兩個進程應做如下協作1、進程C把一個記錄存入緩沖區后,應向進程P發送“緩沖區中有等待處理的記錄”的消息;2、進程P從緩沖區取出記錄后,應向進程C發送“緩沖區中的記錄已取走”的消息;3、進程C只有在得到進程P發送來的“緩沖區中的記錄已取走”的消息后,才能把下一個記錄存入緩沖區,否則,進程C等待,直到消息到達;4、進程P只有在得到進程C發送來的“緩沖區中有等待處理的記錄”的消息后,才能從緩沖區取出記錄,否則,進程P等待,直到消息到達。buffer1buffer2輸入設備打印設備輸入進程計算進程打印進程P1P2P3PROCESScalculatorbeginL1:P(SB);計算下一個數據并送入緩沖區;V(SA);gotoL1;end;PROCESSprinterbeginL2:P(SA);從緩沖區中取出數據并打印;V(SB);gotoL2;end;同步機制調用P操作測試消息是否到達調用V操作發送消息生產者-消費者問題簡單的生產者、消費者問題(單緩沖區)定義:整型變量:Buffer,信號量:SP=1,SG=0
PROCESSProducerbeginL1:produceaproduct;P(SP);Buffer:=product;V(SG);gotoL1endPROCESSConsumerbeginL2:P(SG);TakeaproductformBuffer;V(SP);gotoL2end多緩沖區生產者、消費者問題PROCESSProducerbeginL1:produceaproduct;P(SP);B[k]:=product;k:=(k+1)modn;V(SG);gotoL1endPROCESSConsumerbeginL2:P(SG);TakeaproductformB[t];t:=(t+1)modnV(SP);consumer;gotoL2end定義:整型變量:k=0,t=0整型數組:B[0…n-1]信號量:SP=n,SG=0例子:三個進程R、W1、W2,共享一個緩沖區B,B中最多只能存放一個數。進程R負責不斷地向B中存入整數,進程W1、W2分別負責取出B中的奇數和偶數并進行打印。PROCESSRx:integer;beginL1:{從輸入設備中讀入一個數};x:=讀入的數;P(S);B:=x;ifB=奇數thenV(SO)elseV(SE)gotoL1;endPROCESSW1y:integer;beginL2:P(SO);y:=B;V(S);{打印y中數};gotoL2;endPROCESSW2z:integer;beginL3:P(SE);z:=B;V(S);{打印z中數};gotoL3;end定義信號量:S初值為1表示初始時緩沖區可用SO初值為0用于向打印奇數的進程發消息SE初值為0用于向打印偶數的進程發消息四、同步與互斥的混合問題
例子:有m個生產者和r個消費者共享容量為n的緩沖器(m、r、n均大于1)。每個生產者把自己生產的物品存入緩沖區,每個消費者從緩沖區中取出物品去消費。要求用P、V操作對這些生產者和消費者進行正確管理。定義:整型數組:B[0…n-1]整型變量:k,t初值均為0信號量:S1:初值1用于生產者放入物品S2:初值1用于消費者取出物品SP:初值n緩沖區是否可用SG:初值0緩沖區里是否有物品PROCESSPibeginL1:produceaproduct;P(SP);P(S1);B[k]:=product;k:=(k+1)modn;V(S1);V(SG);gotoL1endPROCESSCjbeginL2:P(SG);P(S2);takeaproductfromB[t];t:=(t+1)modn;V(S2);V(SP);consume;gotoL1end生產者分別向緩沖區送產品,由S1控制互斥訪問。消費者分別從緩沖區中取出產品,由S2控制互斥訪問。例子:現有四個進程R1、R2、W1、W2,它們共享一個可以存放一個數的緩沖器B,R1、R2從鍵盤和磁盤上讀入數據,放到緩沖器B中,W1、W2從緩沖器中分別讀取R1,R2寫入的數據并輸出打印。怎樣用P、V操作來協調四個進程的并發執行?定義:信號量S初值為1用于寫入進程的互斥S1初值為0R1向W1發送消息S2初值為0R2向W2發送消息整型變量BPROCESSR1x:integerbeginL1:{接受來自鍵盤的數};x:=接受的數;P(S);B:=x;V(S1);gotoL1endPROCESSR2y:integerbeginL2:{從磁盤上讀一個數};y:=讀入的數;P(S);B:=y;V(S2);gotoL2endPROCESSW1k:integerbeginL4:P(S1);k:=B;V(S);{打印k中的數};gotoL3endPROCESSW2j:integerbeginL4:P(S2);j:=B;V(S);{打印k中的數};gotoL3end例題:假定一個閱覽室最多可以同時容納100個人閱讀,,讀者進入和離開閱覽室時,都必須在閱覽室門口的一個登記表上登記或去掉登記。試用P、V操作編寫讀者進程的同步算法。分析:設讀者有任意多個,但能同時閱覽的只能100人,所以,設一個信號量S代表空座位數目,初值為100,用它來控制進入閱覽室的讀者進程不超過100。另設信號量m,用于控制對登記表這一共享資源的互斥使用,其初值為1。Process第i個讀者進程beginP(S);P(m);填寫登記表;V(m);坐下閱覽;P(m);在登記表上去掉登記;V(m);V(S);gotoL1;end例題:有一個倉庫存放兩種零件A和B,最大庫容量各為M個。有一車間不斷的取A和B進行裝配,每次各取一個。有兩組供應商分別不斷的供應A和B(每次供應一個)。為保證配套和合理庫存,當某種零件的數量比另一種的數量超過n(n<M)個時,暫停對數量大的零件的進貨,只補充數量少的零件。試用P、V操作正確地實現之。分析:這里除了生產者-消費者這一對控制關系外,還增加了生產者之間的相互制約關系。這種相互制約關系需要另外設置信號量來實現。解答:信號量初值S1實現存取零件的互斥aval_am零件A的庫存容量aval_bm零件B的庫存容量full_a0零件A的可用數量full_b0零件B的可用數量san控制零件B是否超過零件An個sbn控制零件A是否超過零件Bn個A零件供應商的進程B零件供應商的進程生產車間的進程beginL1:P(aval_a);P(sa);P(S);storeA;V(full_a);V(sb);V(S);gotoL1:endbeginL2:P(aval_b);P(sb);P(S);storeB;V(full_b);V(sa);V(S);gotoL2:endbeginL3:P(full_a);P(full_b);P(S);takeAandB;V(aval_a);V(aval_b);V(S);gotoL3:end例題:當進程X和進程Y共享某個資源r,進程并發執行時的程序如下(信號量S的初值為1):請回答:1、兩個進程并發執行時,能否保證互斥使用資源,為什么?2、如果要使兩個進程交替使用資源,若仍使用P、V操作來進行管理,寫出應定義的信號量及其初值;3、修改上述程序,使兩個進程能交替使用資源;ProcessXbeginL1:P(S);使用資源r;V(S);gotoL1;endProcessYbeginL2:P(S);使用資源r;V(S);gotoL2;end1、能保證互斥使用資源。因為在兩個進程中“使用資源r”都作為臨界區,由P(S)和V(S)操作保證了互斥執行,S的初值定義為1,符合要求;2、要使兩個進程交替使用資源,僅僅保證互斥使用資源是不夠的,必須使兩個進程互相等待、互相通知。為此,必須定義新的信號量來實現進程的同步通信。這里定義信號量S1和S2,假定進程X先使用資源,那么S1的初值定義為1,S2的初值定義為0。S1和S2的使用可以保證互斥,所以原來的信號量S可以不要;3、兩個進程可以改寫為:ProcessXbeginL1:P(S1);使用資源r;V(S2);gotoL1;endProcessYbeginL2:P(S2);使用資源r;V(S1);gotoL2;endS1:semaphore:=1;S2:semaphore:=0;例題:假定三個進程間的同步算法如下,其中S1、S2、S3的初值都是1。問:算法在什么情況下會發生死鎖。ProcessAbeginP(S1);P(S2);......V(S2);V(S1);endProcessBbeginP(S2);P(S3);......V(S3);V(S2);endProcessCbeginP(S3);P(S1);......V(S1);V(S3);end假定出現了如下的進程執行順序:進程A執行P(S1),進程B執行P(S2),進程C執行P(S3),進程A執行P(S2),進程B執行P(S3),進程C執行P(S1),即A、B、C都在試圖執行各自第二個P操作。此時,A阻塞在S2,B阻塞在S3,C阻塞在S1,它們都等待其它進程釋放相應的信號量,處于相互等待和循環等待的狀態,此時就是死鎖。其它控制同步與互斥的機制1、信號量集在某些應用場合,一個進程可能要訪問多個臨界資源,比如同時申請輸入和打印設備。相應的描述如下:ProcessAbeginP(Si);P(So);......V(Si);V(So);endProcessBbeginP(So);P(Si);......V(So);V(Si);end仔細分析一下可以看出,這樣互斥使用臨界資源可能造成死鎖。另外,在前述的信號量機制中,P、V操作僅能對信號量施以加1或減1操作,即每次只能獲得或釋放一個單位的臨界資源。當一次需要N個某類資源時,便需要進行N次操作。顯然這是低效的。信號量集機制的基本思想是:將進程在整個運行過程中所需要的所有臨界資源一次性地全部分配給進程,待該進程使用完后一次性的釋放。亦即,對若干個臨界資源的分配,采取原子操作方式。所謂“and信號量集”的思想是:將進程所需要的所有臨界共享資源一次全部分配給它,待其使用完后再一起釋放。只要有一個資源不能獲得,其他資源也都不分配給它。這種同步機制稱為“同時P操作”(SP)同時P操作定義如下:ProcedureSP(S1,…,Sn)Beginif(S1>=1and...andSn>=1)fori:=1tondoSi:=Si–1;else將當前執行進程插入到Si的等待隊列,Si是第一個滿足Si<1的信號量,程序計數器設為P操作的開始;end;同時V操作定義如下:ProcedureV(S1,...,Sn)beginfori:=1tondoSi:=Si+1;喚醒Si等待隊列上的所有等待進程,將它們插入到就緒隊列中。end;采用同步信號量集描述同時申請輸入和打印設備的進程如下:ProcessAbeginSP(Si,So);......SV(Si,So);endProcessBbeginSP(So,Si);......SV(So,Si);end
此外,在有些情況下,當資源數量低于某一下限值時,便不予分配。因而在每次分配前都必須測試資源的數量是否滿足要求。基于上述兩點,可以對信號量機制作進一步擴充,形成一般的信號量集機制。滿足最低要求的資源數量為ti,請求分配的資源數量為di。ProcedureP(S1,t1,d1,...,Sn,tn,dn)beginif(S1>=t1and...andSn>=tn)fori:=1tondoSi:=Si–di;else將當前執行進程插入到Si的等待隊列,Si是第一個滿足Si<ti的信號量,程序計數器設為P操作的開始;end;ProcedureV(S1,d1,...,Sn,dn)beginfori:=1tondoSi:=Si+di;喚醒Si等待隊列上的所有等待進程,將它們插入到就緒隊列中。end;信號量集幾種特殊情況的討論:(1)P(S,d,d),此時在信號量集中只有一個信號量,但它允許每次申請d個資源,當現有資源數少于d時,不予分配;(2)P(S,1,1),此時的信號量集已蛻化為一般的信號量(S>1)或互斥信號量(S=1);(3)P(S,1,0),這是一種很特殊且很有用的信號量。當S>=1時,允許多個進程進入某特定區,當S變為0后,將阻止任何進程進入特定區。換言之,它相當于一個可控開關。2、管程信號量機制的一個特點是:在每個并發進程中都要設置大量的同步操作原語,同步控制部分分散在各個進程中。這不僅給編程帶來了麻煩,而且如果P、V操作不當還可能會導致數據的不確定性和系統的死鎖。Dijkstra認為應把各進程中與同一共享數據有關的同步控制和同步處理集中起來,構成獨立于進程的實體。系統中的各種硬件資源和軟件資源均可用數據結構抽象地描述,既用少量信息和對該資源所執行的操作來表征該資源,而忽略它們的內部結構和實現細節。當共享資源用共享數據來表示時,資源管理程序可以用對該數據結構進行操作的一組過程來表示。我們把這樣一組相關的數據結構和過程稱為管程。Hansen為管程下的定義是:一個管程定義了一個數據結構和能為并發進程所執行的(在該數據結構上的)一組操作,這種操作能同步進程和改變管程中的數據。管程的組成:局部于管程的共享數據說明對該數據結構進行操作的一組過程對局部于管程的數據的初始化語句在管程的實現中必須考慮:互斥:當幾個進程調用管程時,僅允許一個進程進入管程,其它調用者必須等待。同步:在管程中必須設置兩個同步操作原語wait和signal。當進程通過管程請求訪問某共享數據而未能滿足時,管程便調用wait原語使該進程等待,并將它排在等待隊列上。僅當另一進程訪
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 我國鐵路運輸的特點我國鐵路運輸在國民經濟中占有很重要的地位
- 2025年零售行業會員制度創新路徑與忠誠度維護策略解析
- 2025年食品添加劑在食品行業中的食品安全預警與安全性評估
- 2025年物流運輸效率提升新動力:自動駕駛卡車技術深度解析報告
- 2025年生態保護修復項目資金申請成功案例分析:項目生態修復區域規劃報告
- 2025年即時配送行業配送路徑優化與成本控制關鍵技術解析
- 糖尿病足的預防及護理教學
- 新媒體新聞傳播真實性與公信力跨文化比較研究報告
- 消化內科一病一品護理匯報
- 軍神教學設計分析
- 事故隱患內部報告獎勵制度
- 西方文論經典導讀智慧樹知到期末考試答案章節答案2024年浙江大學
- 中國居民膳食指南(全)
- 神話故事相關的英語習語
- 國家開放大學《教育心理學》形成性考核冊參考答案
- 調味品QS審查細則
- 《淹溺急救》PPT課件(2022版)
- 四川省職工住房補貼實施辦法
- 遼寧醫院明細.xls
- JYC全自動變頻抗干擾介質損耗測試儀
- 報考廣東警官學院考生政審表
評論
0/150
提交評論