PV操作之独木桥问题
生活随笔
收集整理的這篇文章主要介紹了
PV操作之独木桥问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、東西向汽車過獨木橋,為了保證安全,只要橋上無車,則允許一方的汽車過橋,待一方的汽車全部過完后,另一方的汽車才允許過橋。
semaphore wait,mutex1,mutex2; mutex1=mutex2=1;wait=1; bridge=1; int counter1,counter2; counter1=0;counter2=0; semaphore S1,S2;S1=3;S2=0; process P左() { while(true) {P(mutex1); count1++; if (count1==1) P(wait); V(mutex1); 過獨木橋; P(mutex1); count1--;if(count1==0) V(wait); V(mutex1); } } process P右() { while(true) {P(mutex2); count2++; if (count2==1) P(wait); V(mutex2); 過獨木橋; P(mutex1); count2--; if(count2==0) V(wait); V(mutex2); } } <strong> </strong>二、在獨木橋問題1中,限制橋面上最多可以有k輛汽車通過。
答1:? semaphore wait,mutex1,mutex2,bridge;mutex1=mutex2=1;bridge=k;wait=1;int counter1,counter2; counter1=0;counter2=0; cobegin process P東( ) { process P西( ) {P(mutex1); P(mutex2);count1++; count2++;if (count1==1) P(wait); if (count2==1) P(wait);V(mutex1); V(mutex2);P(bridge); P(bridge);{過橋}; {過橋}; V(bridge); V(bridge); P(mutex1); P(mutex2);count1--; count2--; if (count1==0) V(wait); if (count2==0) V(wait);V(mutex1); V(mutex2);} } coend 答2: cobegin process P東( ) { process P西( ) {P(bridge1); P(bridge2);P(mutex1); P(mutex2);count1++; count2++;if (count1==1 ) P(wait); if (count2==1) P(wait);V(mutex1); V(mutex2);{過橋}; {過橋}; V(bridge1); V(bridge2); P(mutex1); P(mutex2); count1--; count2--; if (count1==0) V(wait) if (count2==0 ) V(wait); V(mutex1); V(mutex2);} } coend
三、 在獨木橋問題1中,以叁輛汽車為一組,要求保證左方和右方以組為單位交替通過汽車。
semaphore wait,mutex1,mutex2; mutex1=mutex2=1;wait=1; int counter1,counter2; counteru1=0; countd1=0; counteru2=0; counterd2=0; semaphore S1,S2;S1=3;S2=0; Process P左() { while(true) {P(S1) P(mutex1); countu1 ++; if (countu1==1) & (countd1==0) P(wait); V(mutex1); 過獨木橋;V(S2) P(mutex1); countu1--;countd1 ++ if ((countu1==0)&(countd1==3) ) {countd1=0; V(wait); }V(mutex1); } } Process P右() { while(true) {P(S2) P(mutex2); countu2++; if (countu2==1) & (countd2==0) P(wait); V(mutex2); 過獨木橋; V(S1) P(mutex2); countu2--;countd2++ if ((countu2==0)&(countd2==3)) {countd2=0; V(wait); }V(mutex2); } }
左邊過橋分為兩種典型(不完全):
(1)PL1上橋, PL1下橋, PL2上橋, PL2下橋, PL3上橋, PL3下橋
如果PL1上橋, PL1下橋,countu1會減到0,但是countd1計數還是1,可以避免這時就由左邊執行V(wait);PL2上橋, PL2下橋, countu1會減到0,countd1加到2,不執行V(wait);PL2上橋, PL2下橋, countu1會減到0,countd1累計到3,因此只有左邊累計有3個下橋之后,才一次性將countd1改為0,并執行V(wait)喚醒右邊。
(2)PL1上橋, PL2上橋, PL3上橋, PL1下橋, PL2下橋, PL3下橋
PL1,PL2, PL3依次上橋,此時countu1加到3;然后PL1下橋,countu1減到2,countd1加到1,不執行V(wait);PL2下橋,countu1減到1,countd1加到2,不執行V(wait);PL3下橋,countu1減到0,countd1加到3,執行V(wait) 喚醒右邊。
stop用于當另一方提出過橋時,應阻止對方未上橋的后繼車輛。semaphore stop,wait,mutex1,mutex2;stop=mutex1=mutex2=1;wait=1; int counter1,counter2; counter1=0;counter2=0; cobegin process P東( ) { process P西( ) {P(stop); P(stop);P(mutex1); P(mutex2);count1++; count2++;if (count1==1) P(wait); if (count2==1) P(wait); V(mutex1); V(mutex2); V(stop); V(stop); {過橋}; {過橋}; P(mutex1); P(mutex2);Count1--; count2--; if (count1==0) V(wait); if (count2==0) V(wait);V(mutex1); V(mutex2);} } coend
總結
以上是生活随笔為你收集整理的PV操作之独木桥问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小班计算机游戏教案,幼儿园小班游戏教案1
- 下一篇: 饿木命人的衣食住行