chp02-進程同步章進程的描述與控制_第1頁
chp02-進程同步章進程的描述與控制_第2頁
chp02-進程同步章進程的描述與控制_第3頁
chp02-進程同步章進程的描述與控制_第4頁
chp02-進程同步章進程的描述與控制_第5頁
已閱讀5頁,還剩91頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、第2章 進程的描述與控制主講教師:高俊濤 目錄前趨圖和程序執(zhí)行進程的描述進程控制進程通信進程同步經(jīng)典進程的同步問題線程的基本概念線程的實現(xiàn)進程同步: 指對多個相關進程在執(zhí)行次序上的協(xié)調(diào)。這些進程相互合作,在一些關鍵點上可能需要互相等待或互通消息。進程同步的主要任務: 使并發(fā)執(zhí)行的諸進程間能有效地共享資源和相互合作,從而使程序的執(zhí)行具有可再現(xiàn)性。進程同步的基本概念 進程同步的基本概念 1、兩種形式的制約關系(并發(fā)進程間的關系) * 資源共享關系 * 相互合作關系(間接相互制約)(直接相互制約) 進程間彼此無關,進程同步要確保諸進程互斥的訪問臨界資源。 進程間存在先后次序關系,進程同步要確保諸進程

2、在執(zhí)行次序上的協(xié)調(diào),時間上無差錯。2、臨界資源 一段時間內(nèi)只允許一個進程訪問的資源;臨界資源要求互斥的被訪問。實例 :生產(chǎn)者消費者問題進程同步的基本概念 實例 :生產(chǎn)者消費者問題同步規(guī)則 : 不允許消費者進程到一個空緩沖區(qū)去取消息; 也不允許生產(chǎn)者進程向一個已裝有消息且尚未取走消息的緩沖池投放消息。producerconsumer進程同步的基本概念 實例 :生產(chǎn)者消費者問題解決方案 : 1)數(shù)組buffer,表示具有n個緩沖區(qū)的緩沖池; 輸入指針in,指示下一個可投放消息的緩沖區(qū); 輸出指針out,指示下一個可獲取消息的緩沖區(qū)。2)采用循環(huán)緩沖方式: 投放消息時:in=(in+1) mod n

3、 獲取消息時:out=(out+1) mod n 緩沖池空: in = out 緩沖池滿: (in +1) mod n = out3)引入整形變量counter,表示當前緩沖中的消息數(shù): 投放消息時: counter = counter + 1 獲取消息時: counter = counter - 1進程同步的基本概念 生產(chǎn)者/消費者問題的有界循環(huán)緩沖進程同步的基本概念 producer: repeat produce an item in nextp; while counter=n do no-op; buffer in: = nextp; in: = in+1 mod n; counte

4、r: = counter+1; until false;consumer: repeat while counter=0 do no-op; nextc: = buffer out; out: = (out+1) mod n; counter: = counter-1; consumer the item in nextc; until false; Var n, integer;type item=;var buffer: array0, 1, , n-1 of item;in, out: 0, 1, , n-1;counter: 0, 1, , n;進程同步的基本概念 生產(chǎn)者程序和消費者程

5、序都是正確的,而且順序執(zhí)行時其結(jié)果也是正確的。 但在并發(fā)執(zhí)行時,就會出現(xiàn)差錯,問題就在于這兩個進程共享變量counter。程序執(zhí)行時,可簡化描述如下:register1:=counter; register2:=counter; register1:=register1+1; register2:=register2-1; counter: =register1; counter:=register2; 進程同步的基本概念 假設:counter的當前值是5,如采用順序執(zhí)行方式,則最后共享變量counter的值仍為5;如采用并發(fā)執(zhí)行方式,則可能出現(xiàn)下列執(zhí)行順序和結(jié)果:counter值是4 reg

6、ister 1 =counter; (register 1=5) register 1 =register 1+1; (register 1=6) register 2 =counter; (register 2=5) register 2 =register 2-1; (register 2=4) counter =register 1; (counter=6) counter =register 2; (counter=4) 進程同步的基本概念 實例 :生產(chǎn)者消費者問題存在問題 : 相同次數(shù)的輸入/輸出操作中,由于程序段執(zhí)行的次序不同,所得到counter的值不同,偏離正確值,出錯??傻媒Y(jié)

7、論 : 變量counter應作為臨界資源,應互斥的訪問。進程同步的基本概念 3、臨界區(qū)* 臨界區(qū)的定義 各進程中訪問臨界資源的程序代碼稱為臨界區(qū)。Repeat entry section(進入?yún)^(qū)) critical section(臨界區(qū)) exit section(退出區(qū)) remainder section(剩余區(qū))until false進程同步的基本概念 4、同步機制應遵循的準則空閑讓進:忙則等待:有限等待:讓權(quán)等待:“死等”“忙等”進程同步的基本概念 Critical-Section Problem兩進程解法兩個進程標為P0和P1,為了方便,當使用Pi時,用Pj來表示另一個進程;即j

8、= 1 i算法1進程共享一普通整數(shù)變量turn,其初值為0(或1)如果turn = i, Pi允許在其臨界區(qū)內(nèi)執(zhí)行。Shared variables: int turn; / initially turn = 0turn = i; / Pi can enter its critical sectionProcess Pido while (turn != i) ;critical sectionturn = j;reminder section while (1);滿足互斥,但不滿足空閑讓進。算法2布爾標志flag用來表示線程它準備進入其臨界區(qū)Shared variablesboolean f

9、lag2; / initially flag0 = flag1 = false.flag i = true; / Intention: Pi ready to enter its critical sectionProcess Pido flagi = true;while (flagj) ;critical sectionflag i = false;remainder section while (1);滿足互斥,但不滿足空閑讓進。算法21. do 2. flagi = true;3. while (flagj) ; /進入?yún)^(qū)4. 臨界區(qū)5. flagi = false; /退出區(qū)6. 剩

10、余區(qū)7. while (1);將語句2與語句3的位置互換,又將如何?不滿足互斥和忙則等待。算法3結(jié)合算法1與算法2的思想是否滿足臨界區(qū)的要求?do flagi = true;turn = j;while (flagj & turn = j) ; /進入?yún)^(qū)臨界區(qū)flagi = false; /退出區(qū)剩余區(qū) while (1);多進程解法面包店算法的思想:該算法的基本思想源于顧客在面包店中購買面包時的排隊原理. 顧客在進入面包店前, 首先抓一個號, 然后按照號碼由小到大的次序依次進入面包店購買面包. 這里, 面包店發(fā)放的號碼是由小到大的, 但是兩個或兩個以上的顧客卻有可能得到相同的號碼(使所抓號碼

11、不同需要互斥), 如果多個顧客抓到相同的號碼, 則規(guī)定按照顧客名字的字典次序進行排序, 這里假定顧客是沒有重名的. 在計算機系統(tǒng)中, 顧客就相當于進程, 每個進程有一個唯一的標識, 我們用P的下面加一個下標來表示. 例如: 對于 Pi和Pj, 如果有ij, 則先為Pi服務, 即Pi先進入臨界區(qū)。多進程解法實現(xiàn)boolean choosingn;int numbern; 前者表示進程是否正在抓號,正在抓號的進程choosingi為true,否則為false, 其初值均為false. 后者用來記錄各個進程所抓到的號碼, 如numberi為0, 則進程Pi沒有抓號, 如numberi不為0, 則其正

12、整數(shù)值為進程Pi所抓到的號碼, 其初值均為0.定義:(a,b)(c,d) 如果 ac or (a=c and bd). max(a0,an-1) 其值為一正整數(shù)k, 對于所有i, 0in-1, kai 算法見下頁 do choosingi = true;numberi = max(number0, number1, , numbern-1) + 1;choosingi = false;for (j = 0; j n; j +) while (choosingj) ;while (numberj != 0) & (numberj, j) =0,則進程繼續(xù)運行; 若S 0,則進程繼續(xù)運行; 若S=

13、0,則從該信號量的等待隊列中移出一個進程,使其變?yōu)榫途w態(tài),然后,再返回原進程繼續(xù)執(zhí)行;Signal:(S)操作信號量機制P、V操作的定義例:網(wǎng)絡訪問人數(shù)計數(shù)程序。 S=1定義信號量,初值為1P(S)Wait(S)Application(“Counter”)= Application(“Counter”)+1V(S)Signal(S)信號量機制P、V操作的定義 為使多個進程能互斥地訪問某臨界資源,只需為該資源設置一互斥信號量mutex,并設其初始值為; 然后將各進程的臨界區(qū)()置于wait(mutex)和signal(mutex)操作之間。 但,在利用信號量機制實現(xiàn)進程互斥時,wait和sign

14、al必須成對地出現(xiàn)。信號量機制整型信號量例:var mutex:semaphore:=1beginrepeatwait(mutex);critical section;signal(mutex) ;remainder section ;until false ;end臨界區(qū),訪問臨界資源定義信號量信號量機制整型信號量整型信號量機制: 未遵循“讓權(quán)等待”的準則; 進程可能處于“忙等”的狀態(tài)。記錄型信號量機制: 整型變量value:代表資源數(shù)目; 進程鏈表指針L:鏈接等待該資源的進程。信號量機制記錄型信號量procedure wait(S) var S: semaphore; begin S.va

15、lue:=S.value-1; if S.value0 then block(S,L) endprocedure signal(S) var S: semaphore; begin S.value: =S.value+1; if S.value0 then wakeup(S,L); end type semaphore=record value:integer; L:list of process; end信號量機制記錄型信號量 (1)S.value的初值表示系統(tǒng)中某類資源的數(shù)目, 因而又稱為資源信號量,每次wait操作意味著進程請求一個單位的該類資源,S.value:=S.value-1 。

16、 (2)當S.value0時,進程自阻塞,S.value的絕對值表示在該信號量鏈表中已阻塞進程的數(shù)目。 (3)該機制遵循了“讓權(quán)等待”準則。 (4)如果S.value的初值為1,表示只允許一個進程訪問臨界資源,此時的信號量轉(zhuǎn)化為互斥信號量。 信號量機制記錄型信號量process A: process B:Wait (Dmutex); wait (Emutex);Wait (Emutex); wait (Dmutex); 假設:進程A、B均需要共享數(shù)據(jù)D、E,則兩個進程中資源申請程序段如下:A、B執(zhí)行操作可能為:process A: wait(Dmutex); 于是Dmutex=0process

17、 B: wait(Emutex); 于是Emutex=0process A: wait(Emutex); 于是Emutex=-1 A阻塞process B: wait(Dmutex); 于是Dmutex=-1 B阻塞 信號量機制AND型信號量AND同步機制的基本思想是: (1)將進程所有資源,一次性地全部分配給進程或者回收。 (2)采取原子操作方式:要么全部分配到進程,要么一個也不分配。 (3)在wait操作中,增加了一個“AND”條件,故稱為AND同步,或稱為同時wait操作。信號量機制AND型信號量避免請求保持條件,防止系統(tǒng)的不安全性。Wait(S1,S2,Sn )if S11 and S

18、n1 thenfor i:=1 to n doSi:=Si-1;endforelse(block ) endifSignal(S1,S2,Sn )for i:=1 to n doSi:=Si+1;(wakeup)endfor信號量機制AND型信號量Ssignal(S1, S2, , Sn) for i:=1 to n do Si=Si+1; Remove all the process waiting in the queue associated with Si into the ready queue. endfor; Swait(S1, S2, , Sn) if Si1 and and

19、Sn1 then for i: =1 to n do Si:=Si-1; endfor else Place the process in the waiting queue associated with the first Si found with Si1, and set the program count of this process to the beginning of Swait operation endif信號量機制AND型信號量 (1)在記錄型信號量機制中,每次只能獲得或釋放一個單位的臨界資源。因此,當一次需個某類臨界資源時,便需要次wait操作,顯然這是低效的。 (2

20、)在有些情況下,當資源數(shù)量低于某一下限值時,便不予以分配。因此,在每次分配之前,都必須測試該資源的數(shù)量是否大于測試值。 (3)基于上述兩點,可以對AND信號量機制進行擴充,形成一般化的“信號量集”機制。信號量機制信號量集Swait(S1, t1, d1, , Sn, tn, dn) if Sit1 and and Sntn then for i=1 to n do Si=Si-di; endfor else Place the executing process in the waiting queue of the first Si with Siti and set its program

21、 counter to the beginning of the Swait Operation. (block ) endifsignal(S1, d1, , Sn, dn) for i:=1 to n do Si :=Si+di;Remove all the process waiting in the queue associated with Si into the ready queue。 (wakeup) endfor; S為信號量, t為下限值, d為需求量信號量機制信號量集一般“信號量集”的幾種特殊情況: (1) Swait(S, d, d)。 此時在信號量集中只有一個信號量S

22、, 但允許它每次申請d個資源,當現(xiàn)有資源數(shù)少于d時,不予分配。 (2) Swait(S, 1, 1)。 此時的信號量集已蛻化為一般的記錄型信號量(S1時)或互斥信號量(S=1時)。 (3) Swait(S, 1, 0)。這是一種很特殊且很有用的信號量操作。當S1時,允許多個進程進入某特定區(qū);當S變?yōu)?后,將阻止任何進程進入特定區(qū)。換言之,它相當于一個可控開關。 信號量機制信號量集1、利用信號量實現(xiàn)進程互斥 Var mutex:semaphore: =1;begin parbegin process 1: begin repeat wait(mutex); critical section si

23、gnal(mutex); remainder section until false;end process 2: begin repeat wait(mutex); critical section signal(mutex); remainder section until false; endparend end信號量機制信號量的應用 Var a,b,c,d,e,f,g; semaphore:=0,0,0,0,0,0,0; begin parbegin begin S1; signal(a); signal(b); end; begin wait(a); S2; signal(c); s

24、ignal(d); end; begin wait(b); S3; signal(e); end; begin wait(c); S4; signal(f); end; begin wait(d); S5; signal(g); end; begin wait(e); wait(f); wait(g); S6; end; parend end 2、利用信號量實現(xiàn)前趨關系 圖 2-12 前趨圖舉例 S4S5S3S1S6S2信號量機制信號量的應用1)信號量可能存在的問題 * 臨界區(qū)的執(zhí)行分散在各進程中,不便于系統(tǒng)對控制和管理。 * 很難發(fā)現(xiàn)和糾正分散在用戶程序中的對同步原語的錯誤使用。2)解決問題

25、的可能措施 * 把分散的各同類臨界資源集中起來,統(tǒng)一管理。 * 為每個共享資源設立一個專門程序,來統(tǒng)一管理各進程對資源的訪問。3)達到的可能結(jié)果 * 既便于系統(tǒng)管理共享資源,又能保證互斥訪問。管程機制1、管程的基本思想 * 系統(tǒng)中各種硬件資源和軟件資源,均采用數(shù)據(jù)結(jié)構(gòu)加以抽象的描述,即用少量信息和對該資源所執(zhí)行的操作來表征資源,而忽略它們的內(nèi)部結(jié)構(gòu)和實現(xiàn)細節(jié)。 * 資源管理程序可用對該數(shù)據(jù)結(jié)構(gòu)進行操作的一組過程表示,并實現(xiàn)對資源的管理。2、管程的定義 * 把表征某種資源的一個數(shù)據(jù)結(jié)構(gòu)和實現(xiàn)資源管理的相關過程一并稱為管程。管程機制2、管程的定義 * 把表征某種資源的一個數(shù)據(jù)結(jié)構(gòu)和實現(xiàn)資源管理的相

26、關過程一并稱為管程。 * 即:一個管程定義了一個數(shù)據(jù)結(jié)構(gòu)和能為并發(fā)進程所執(zhí)行的一組操作,這組操作能同步進程和改變管程中的數(shù)據(jù)。 在該數(shù)據(jù)結(jié)構(gòu)上使進程同步互斥共享資源資源狀態(tài)分配參數(shù)使用狀況管程機制圖 2-13 管程的示意圖 3、管程的組成 type monitor-name=monitor variable declarations procedure entry P1(); begin end; procedure entry P2(); begin end; procedure entry Pn(); begin end; begin initialization code; end 管程

27、的語法如下:共享數(shù)據(jù)一組操作過程初始化代碼進入隊列條件(不忙)隊列管程機制4、條件變量 引入: 區(qū)分不同原因造成的等待; 形式: var x,y:condition ; 引用: x.wait x.signal; 注意: x.signal操作的作用是重新啟動一個被阻塞的進程。假如沒有阻塞進程,則不起作用。 x.signal與信號量機制中的signal操作不同。 管程機制目錄前趨圖和程序執(zhí)行進程的描述進程控制進程通信進程同步經(jīng)典進程的同步問題線程的基本概念線程的實現(xiàn) 未考慮進程的互斥與同步問題,因而造成了數(shù)據(jù)Counter的不確定性。 生產(chǎn)者消費者問題是相互合作的進程關系的一種抽象,有很大的代表性

28、及實用價值。 生產(chǎn)者消費者問題 1、利用記錄型信號量解決生產(chǎn)者消費者問題 (1)設公用緩沖池,具有n個緩沖區(qū); (2)利用互斥信號量mutex實現(xiàn)對緩沖池的互斥使用; (3)資源信號量empty和full分別表示空緩沖區(qū)和滿緩沖區(qū)的數(shù)量。 (4)只要緩沖池未滿,生產(chǎn)者便可將消息送入緩沖池; (5)只要緩沖池未空,消費者便可從池中取走一個消息。同步規(guī)則 :(4)(5)生產(chǎn)者消費者問題 begin parbegin proceducer:begin repeat producer an item nextp; wait(empty); wait(mutex); buffer(in):=nextp;

29、 in:= (in+1) mod n; signal(mutex); signal(full); until false; endconsumer:begin repeat wait(full); wait(mutex); nextc:=buffer(out); out:= (out+1) mod n; signal(mutex); signal(empty); consumer the item in nextc; until false; end parend end Var mutex, empty, full:semaphore: = 1,n,0; buffer:array0, , n

30、-1 of item; in, out: integer: = 0, 0;生產(chǎn)者消費者問題在生產(chǎn)者消費者問題中應特別注意: (1)實現(xiàn)互斥的wait(mutex)和signal(mutex)必須成對地出現(xiàn); (2)對資源信號量empty和full的wait和signal操作,同樣需要成對地出現(xiàn),但它們分別處于不同的程序中。 (3)多個wait操作順序不能顛倒。應先執(zhí)行對資源信號量的wait操作,然后再執(zhí)行對互斥信號量的wait操作,否則可能引起進程死鎖。生產(chǎn)者消費者問題 begin parbegin producer:begin repeat produce an item in nextp;

31、 Swait(empty, mutex); buffer(in): = nextp; in:= (in+1)mod n; Ssignal(mutex, full); until false; end2、利用AND信號量解決生產(chǎn)者消費者問題 Var mutex, empty, full:semaphore: = 1, n, 0; buffer:array0, , n-1 of item; in out:integer: = 0, 0;consumer:begin repeat Swait(full, mutex); nextc: = buffer(out); out: = (out+1) mod

32、 n; Ssignal(mutex, empty); consumer the item in nextc; until false; end parend end 生產(chǎn)者消費者問題3、利用管程解決生產(chǎn)者-消費者問題 建立管程Proclucer-Consumer, 簡稱為PC,包括兩個過程: (1) put(item)過程:生產(chǎn)者利用該過程將自己生產(chǎn)的產(chǎn)品投放到緩沖池中, 并用整型變量count來表示在緩沖池中已有的產(chǎn)品數(shù)目,當countn時,表示緩沖池已滿,生產(chǎn)者須等待。 (2) get(item)過程:消費者利用該過程從緩沖池中取出一個產(chǎn)品,當count0時,表示緩沖池中已無可取用的產(chǎn)品,

33、 消費者應等待。 生產(chǎn)者消費者問題procedure entry put(item) begin if countn then notfull.wait; buffer(in): = nextp; in: = (in+1) mod n; count: = count+1; if notempty.queue then notempty.signal; endtype producer-consumer=monitor Var in,out,count:integer; buffer:array0,n-1 of item; notfull, notempty:condition;procedur

34、e entry get(item) begin if count0 then notempty.wait; nextc:=buffer(out); out:= (out+1) mod n; count:=count-1; if notfull.quene then notfull.signal; end begin in:=out:=0; count=0 end 生產(chǎn)者消費者問題 producer: begin repeat produce an item in nextp; PC.put(item); until false; end consumer: begin repeat PC.ge

35、t(item); consume the item in nextc; until false; end 生產(chǎn)者消費者問題 * 五個哲學家生活方式交替的進行思考和進餐;相鄰兩個哲學家只能有一個哲學家用餐。 * 共用一張園桌,分別座在五把椅子上;圓桌上有五個碗和五支筷子(臨界資源)。 * 平時一個哲學家進行思考,饑餓時取左右兩個筷子進餐。哲學家進餐問題1、利用記錄型信號量解決哲學家進餐問題 (1)筷子是臨界資源; (2)用一個信號量表示一只筷子;五個信號量構(gòu)成信號量數(shù)組: Var chopstick: array0, , 4 of semaphore; 所有信號量均被初始化為1,表示只有1只筷子

36、,同時起到互斥信號量和資源信號量作用。哲學家進餐問題第i位哲學家的活動可描述為: repeat wait(chopsticki); wait(chopstick(i+1) mod 5); eat; signal(chopsticki); signal(chopstick(i+1) mod 5); think; until false; 可能導致死鎖哲學家進餐問題解決可能發(fā)生死鎖的方法: (1) 至多只允許有四位哲學家同時去拿左邊的筷子,最終能保證至少有一位哲學家能夠進餐。 (2) 僅當哲學家的左、右兩只筷子均可用時,才允許他拿起筷子進餐。 (3) 規(guī)定奇數(shù)號哲學家先拿他左邊的筷子,然后再去拿右

37、邊的筷子;而偶數(shù)號哲學家則相反。 哲學家進餐問題2、利用AND信號量機制解決哲學家進餐問題Var chopsiick array 0, , 4 of semaphore: = (1,1,1,1,1); processi repeat think; Sswait(chopstick(i+1) mod 5, chopstick i); eat; Ssignat(chopstick (i+1) mod 5, chopstick i); until false; 哲學家進餐問題Shared data semaphore chopstick5 = 1, 1, 1, 1, 1;/ One chopstic

38、k can only be picked up / by one philosophersemaphore coord = 4;/ Only four philosophers can try to eat/ simultaneously 哲學家進餐問題Philosopher i:do wait(coord);wait(chopsticki)wait(chopstick(i+1) % 5) eat signal(chopsticki);signal(chopstick(i+1) % 5);signal(coord); think while (1);哲學家進餐問題monitor dp enum

39、 thinking, hungry, eating state5;condition self5;void pickup(int i) / following slidesvoid putdown(int i) / following slidesvoid test(int i) / following slidesvoid init() for (int i = 0; i 5; i+)statei = thinking;哲學家進餐問題管程void test(int i) if ( (state(i + 4) % 5 != eating) & (statei = hungry) & (stat

40、e(i + 1) % 5 != eating) statei = eating;selfi.signal();哲學家進餐問題管程void pickup(int i) statei = hungry;testi;if (statei != eating)selfi.wait();void putdown(int i) statei = thinking;/ test left and right neighborstest(i+4) % 5);test(i+1) % 5);哲學家進餐問題管程Philosopher(i)dp.pickup(i);eat, eat, eatdp.putdown(i)

41、哲學家進餐問題管程1)同步規(guī)則: * 保證一個write進程必須與其它進程互斥地訪問共享對象的同步問題。 * 允許多個進程同時讀一個共享對象; * 但,絕不允許一個write進程和其它讀進程或?qū)戇M程同時訪問共享文件。 1、利用記錄型信號量解決讀者-寫者問題讀者寫者問題2)解決方案: * 為實現(xiàn)reader進程和write進程讀或?qū)憰r的互斥,設置互斥信號量wmutex; * 因為readcount可能被多個readcount進程訪問,設置互斥信號量rmutex ; * 整型信號量readcount表示正在讀的進程數(shù)目; * 僅當redacount=0時才可以寫。 1、利用記錄型信號量解決讀者-寫

42、者問題讀者寫者問題 begin parbegin Reader:begin repeat wait(rmutex); if readcount=0 then wait(wmutex); Readcount: = Readcount+1; signal(rmutex); perform read operation; wait(rmutex); readcount: = readcount-1; if readcount=0 then signal(wmutex); signal(rmutex); until false; end讀者優(yōu)先:Var rmutex, wmutex:semaphore

43、:=1,1; Readcount:integer: =0; writer:begin repeat wait(wmutex); perform write operation; signal(wmutex); until false; end parend end 讀者寫者問題Reader:begin Wait(Mut1); Signal(Mut1); Wait(Mut2); Rcount:=Rcount+1; IfRcount=1thenWait(Fmutex); Signal(Mut2); 讀操作; Wait(Mut2); Rcount:=Rcount-1; IfRcount=0thenSignal(Fmutex); Singal(Mut2); end寫者優(yōu)先:Writer:begin Wait(Mut1);Wcount:=Wcount+1;IfWcount=1then Wait(Fmutex);Signal(Mut1);Wait(WMutex); 寫操作;Signal(Wmutex);Wait(Mut1);Wcount:=Wcount-1;IfWcount=0then Signal(Fmutex);Signal(Mut1); end 讀者寫者問題Var Mut

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論