互斥工具-軟件方式

互斥工具-軟件方式

ID:38706742

大?。?79.00 KB

頁數(shù):25頁

時間:2019-06-18

互斥工具-軟件方式_第1頁
互斥工具-軟件方式_第2頁
互斥工具-軟件方式_第3頁
互斥工具-軟件方式_第4頁
互斥工具-軟件方式_第5頁
資源描述:

《互斥工具-軟件方式》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、Part1軟件互斥Dekker算法1booleanflag[2];2intturn;3voidP0()4{5while(true)6{7flag[0]=true;8while(flag[1])9if(turn==1)10{11flag[0]=false;12while(turn==1)13/*什么也不做*/14flag[0]=true;15}16臨界區(qū)17turn=1;18flag[0]=false;19其余部分20}21}Peterson算法1booleanflag[2]={false,false};2intturn;

2、3voidP0()4{5while(true)6{7flag[0]=true;8turn=1;9while(flag[1]&&turn==1)10/*什么也不做*/;11臨界區(qū)12flag[0]=false;13/*其余部分*/;14}15}16voidP1()17{18while(true)19{20flag[1]=true;21turn=0;22while(flag[0]&&turn==0)23/*什么也不做*/;24臨界區(qū)25flag[1]=false;26/*其余部分*/;27}28}Part2硬件互斥Tests

3、et指令1booleantestset(inti)/*實現(xiàn)何種功能*/2{3if(i==0)4{5i=16returntrue7}8else9returnfalse10}11constintn=/*進(jìn)程*/12intboltbolt=0testset(bolt)=truebolt=1進(jìn)入臨界區(qū)此時標(biāo)志位bolt=1當(dāng)占用資源結(jié)束bolt=0允許其它進(jìn)程占有臨界資源13voidP(inti)14{15while(1)16{17while(!testset(bolt))18/*什么也不做*/;19臨界區(qū)20bolt=021/

4、*其余部分*/;22}23}24Voidmain()25{26bolt=027parbegin(P(1),P(2),…,P(n));28}exchange指令1voidexchange(intregister,intmemory)/*實現(xiàn)何種功能*/2{3inttemp4temp=memory5memory=register6register=temp7}8constintn=/*進(jìn)程*/9intbolt10voidP(inti)11{進(jìn)程1:keyi=1bolt=0(資源未被占用)通過17行程序:exchange(ke

5、yi,bolt)keyi=0bolt=1(資源已被占用)進(jìn)程2:keyi=1bolt=1通過17行程序:exchange(keyi,bolt)keyi=1bolt=1等待bolt=0才可以占用資源12intkeyi13while(1)14{15keyi=116while(keyi!=0)17exchange(keyi,bolt)18臨界區(qū)19exchange(keyi,bolt)20/*其余部分*/;21}22}23voidmain()24{25bolt=026parbegin(P(1),P(2),…,P(n))27}P

6、(Wait)操作/*申請一個資源*/1P(S)2{3S--4ifS<05block()6}V(Signal)操作/*釋放一個資源*/7V(S)8{9S++10ifS<=011wakeup()12}P(S)臨界區(qū)V(S)輸入進(jìn)程P1P(S1)讀信息到緩沖區(qū)BV(S2)輸出進(jìn)程P2P(S2)從緩沖區(qū)B讀出信息V(S1)如何設(shè)置S1,S2的初值,才能保證進(jìn)程P1,P2同步進(jìn)行?生產(chǎn)者消費者問題1semaphoremutex=1,empty=n,full=02inti=j=03itembuffer[n]4voidproducer

7、()5{6while(1)7{8producenextproduct9P(empty)10P(mutex)11buffer[i]=product12i=i+1%n13V(mutex)14V(full)15}16}17voidconsumer()18{19while(1)20{21P(full)22P(mutex)23product=buffer[j]24j=(j+1)%n25V(mutex)26V(empty)27consumetheproduct28}29}30voidmain()31{32parbegin(produ

8、cer(),consumer())33}讀者寫者問題(見PPT)哲學(xué)家進(jìn)餐問題Originalprocessing:#defineN51voidphilosopher(inti)2{3while(true)4{5thinking6takefork[i]7takefork[(i+1)%5]8eating9putdown

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。