信号量进程同步与互斥
2.哲學家吃面問題
semaphore fork[5];
? ? ? ? ? ? ? ? ? ? ? ? ? ?for(int i=0; i<5;i++)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? fork[i]=1;
? ? ? ? ? ? ? ? ? ? ? cobegin
? ? ? ? ? ? ? ? ? ? ? ? ? ? process philosopher_i( ){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?while(ture){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? think( );
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?P(fork[i]);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?P(fork[(i+10%5]);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? eat();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?V(fork[i]);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?V(fork[(i+10%5]);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}
coend
?
5.一間酒吧里有三個音樂愛好者隊列,第一隊的音樂愛好者只有隨身聽,第二隊只有音樂磁帶,第三隊只有電池。而要聽音樂就必須隨身聽、音樂磁帶和電池這三種物品俱全。酒吧老板一次出售這三種物品中的任意兩種。當一名音樂愛好者得到這三種物品并聽完一首樂曲后,酒吧老板才能再一次出售這三種物品中的任意兩種。于是第二名音樂愛好者得到這三種物品,并開始聽樂曲。全部買賣就這樣進行下去。試用P,v操作正確解決這一買賣。?
semaphore mutex=1,s1=0,s2=0,s3=0;
cobegin
????fan1(){
????????s1=1;
???????P(s2);
???????P(s3);
??????if(s1&&s2&&s3){
????????V(mutex);
????????V(s1);
????????V(s2);
????????V(s3);
??????????}
????}
?fan2(){
??????s2=1;
???????P(s1);
???????P(s3);
??????if(s1&&s2&&s3){
??????????V(mutex);
??? ???????V(s1);
??????? ??V(s2);
??????? ???V(s3);}
??}
?fan3(){
???????s3=1;
???????P(s1);
???????P(s2);
??????if(s1&&s2&&s3){
??????????V(mutex);
??? ????V(s1);
??????? V(s2);
??????? V(s3);}
???}
}
Coend
6、
semaphore mutex=A, customer_count=0:
Cobegin
Customeri(){
p(mutex);
取號碼,進入隊列;
v(mutex);
v(customer_count);
}
serversi(){
while(A){
p(customer_count);
p(mutex);
從隊列中取下一個號碼;
v(mutex);
為該號碼持有者服務;
}
}
Coend
7、
Cobegin
Var x:integer; s:semaphore;
s:=A
Process PA
Var y, z:integer;
Begin
p(s);
x:=A;
y:=0;
if x>=A then y:=y+A;
v(s);
z:=y;
End
Process PB
Var t, u:integer;
Begin
p(s);
x:=0;
t:=0;
if x<A then t:=t+B;
v(s);
u:=t;
End
Coend
?
?
8、
semaphore S1,S2;
S1=1;S2=0;
cobegin
? ? ? process P1(){
? ? ? ? ? ? begin
? ? ? ? ? ? repeat
? ? ? ? ? ? P(S1);
? ? ? ? ? ? 揀白子
? ? ? ? ? ? V(S2);
? ? ? ? ? ? until false;
? ? ? ? ? ?end
? ? ? ? }
? ? ? process P2(){
? ? ? ? ? ?begin
? ? ? ? ? ?repeat
? ? ? ? ? ?P(S2);
? ? ? ? ? ?揀黑子
? ? ? ? ? ?V(S1);
? ? ? ? ? ?until false;
? ? ? ? ? ?end
? ? ? ?}
coend.
轉載于:https://www.cnblogs.com/huchen826089/p/10822161.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的信号量进程同步与互斥的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Metasploit学习2-后门制作
- 下一篇: Xcode 9: An error oc