我來回答一下吧。
semaphore S=1,S1=0,S2=0,S3=0;//訊號量分別對應供應商和三個吸菸者
boolean tobacco=false,paper=false,match=false;//原料初試狀態
producer:
while(true)
P(S);
隨機放兩個原料...使對應的變數為true
//判斷需要喚醒的抽菸者
if(paper&&match)
V(S1);
else if(tobacco&&match)
V(S2);
else
V(S3);
somker1:
P(S1);
paper=false;
match=false;
V(S);
somker2:
P(S2);
tobacco=false;
somker3:
P(S3);
我來回答一下吧。
semaphore S=1,S1=0,S2=0,S3=0;//訊號量分別對應供應商和三個吸菸者
boolean tobacco=false,paper=false,match=false;//原料初試狀態
producer:
while(true)
P(S);
隨機放兩個原料...使對應的變數為true
//判斷需要喚醒的抽菸者
if(paper&&match)
V(S1);
else if(tobacco&&match)
V(S2);
else
V(S3);
somker1:
while(true)
P(S1);
paper=false;
match=false;
V(S);
somker2:
while(true)
P(S2);
tobacco=false;
match=false;
V(S);
somker3:
while(true)
P(S3);
tobacco=false;
paper=false;
V(S);