生产者-消费者问题&&读者-写者问题
生产者 - 消费者问题
定义
Program producer_consumer
const sizeofbuffer = ... //缓冲量大小
var s: semaphore(:=1);//互斥信号量 申请/释放 资源使用权
var n: semaphore(:=0);//资源信号量 (数据资源) 申请/归还 资源
var e: semaphore(:sizeofbuffer);//资源信号量 空存储单元
生产者
procedure producer;
begin
repeat
生产一条数据;
wait(e);
wait(s);
存入一条数据;
signal(s);
signal(n);
forever
end;
消费者
procedure consumer;
begin
repeat
wait(n);
wait(s);
取一条数据;
signal(s);
signal(e);
消费数据;
forever
end;
主程序
begin
parbegin
producer;consumer;
parend
end;
读者 - 写者问题(读者优先)
定义
Program readers_writers;
const readcount:integer;//统计读者个数
var x,wsem:semaphore(:=1)//互斥信号量
读者
procedure reader;
begin
repeat
wait(x);//实现统计数量互斥,读者要一个一个去登记
readcount:= readcount+1;
if readcount = 1 then wait(wsem);//有读者了,就不让写者进来了
signal(x);
读数据;
wait(x);
readcount:= readcount - 1;
if readcount = 0 then signal(wsem);//读者出去完毕,通知写者进来
signal(x);
forever
end;
写者
procedure writer;
begin
repeat
wait(wsem);
写数据;
signal(wsem);
forever
end;
主程序
begin
readcount:= 0;
parbegin
reader;writer;
parend
end;