读者写者问题:哲学家就餐问题对于互斥访问有限资源的竞争问题(如I/O设备)一类的建模过程十分有用。另一个著名的问题是读者-写者问题(Courtois 等人,1971),它为数据库访问建立了一个模型。例如,设想一个飞机订票系统,其中有许多竞争的进程试图读写其中的数据。多个进程同时读数据库是可以接受的,但如果一个进程正在更新(写)数据库,则所有的其他进程都不能访问该数据库,即使读操作也不行。
所有等待的情况:
(一)写者要等到没有读者的时候才能去写文件
(二)所有读者要等待写者写完文件后才能去读文件
伪代码:
Var rmutex,wmutex:semaphore:=1
readcount:integer:=0
begin
repeat;
wait(rmutex);
readcount = readcount +1;
if readcount =1 then
wait(wmutex);
signal(rmutex);
读数据
wait(rmutex);
readcount := readcount -1;
if readcount =0 then
signal(wmutex);
signal(rmutex);
forever;
end;
begin
repeat:
wait(wmutex);
<