1:利用记录型信号量解决:
Varrmutex,wmutex :semaphore:=1,1;
Readcount :integer:=0;
begin
parbegin
Readercont:begin
repeat
wait(rmutex);
ifreadcount=0 then wait(wmutex);
Readcount:Readcount+1;
signal(rmutex);
readoperation;
wait(rmutex);
Readcount:Readcount-1;
If Readcount=0 then signal(wmutex);
Signal(rmutex);
until false;
writer:begin
wait(wmutex);
writer operation
signal(wmutex)
until false
end
parend
end
1:利用信号量集机制解决:(即改为允许多个读者同时读,控制读者的数目)
VarReadcount :integer;
R,W:semaphore:=Readcount,1;//学者与读者的互斥信号量
begin
parbegin
reder:begin
repeat
Swait(R,1,1);
Swait(W,1,0);
Readoperation;
Signal(R,1);
until false;
end
writer:begin
repeat
Swait(W,1,1;R,Readcount,0);
Writer operation
Signal(W,1);
untilfalse;
end
parend
end
parendend
参考文献:计算机操作系统