操作系统过桥问题用线程-条件变量实现

同一方向的车可连续过桥,当某一方向有车过桥时,另一方向的车必须等待,当某一方向无车过桥时,另一方向的
车可以过桥。桥上不允许两车交会,但允许同方向多辆车依次通行(即桥上可以有多个同方向的车)。

如有帮助请采纳。点击我回答右上角【采纳】按钮。

解:将独木桥的两个方向分别标记为A和B;并用整形变量countA和countB分别表示A、B方向上已在独木桥上的行人数,初值为0;再设置三个初值都1的互斥信号量:SA用来实现对countA的互斥访问,SB用来实现对countB的互斥访问,mutex用来实现两个方向的行人对独木桥的互斥使用。则具体描述如下:

Var SA,SB,mutex:semaphore:=1,1,1; CountA,countB:integer:=0,0: begin

parbegin

process A: begin

wait(SA);

if(countA=0) then wait(mutex); countA:=countA+1; signal(SA); 过独木桥; wait(SA); countA:=countA-1;

if (countA=0) then signal(mutex); signa(SA);

end

process B: begin

wait(SB);

if(countB=0) then wait(mutex); countB:=countB+1;

signal(SB);

过独木桥; wait(SB);

countB:=countB-1;

if (countB=0) then signal(mutex);

signa(SB);

end

parend

end