计算机操作系统 管程机制实现读者写者问题

2025-03-13 16:18:01
推荐回答(1个)
回答1:

管程实现读者写者算法

管程:bulletin =MODULE ;(假设已实现一基本管程monitor,同时提供了enter,leave,signal,wait等操作)
r,w:condition;
-r 控制读者使用资源, w 控制写者使用资源;
writing:boolean;
-当前写者是否使用资源;
read_account:integer;
define start_read,end_read,start_writer,end_writer;
use monitor.enter,monitor.leave,monitor.wait,monitor.signal;
procedure start_read();
{ if (writing) monitor.wait(r);
read_account++;
monitor.signal(r);}
procedure end_read();
{read_account--;
if(read_account =0) monitor.signal(w); }
procedure start_write();
{ if(read_account<>0) or writing);
monitor.wait(w);
writing=true;
procedure end_write();
{ writing=fasle;
if(r<>NULL) monitor.signal(r);
else monitor.signal(w); }
根据上述定义的一系列过程,给出改进后的读者写者算法。
读者写者算法如下:
reader-(读者进程):
{
while(true)
{
bulletin.enter();
bulletin.start_read();
read();
bulletin.end_read();
bulletin.leave();}
}
writer-(写者进程):
{
while(ture)
{
bulletin.enter();
bulletin.start_write();
write();
bulletin.end_write();
bulletin.leave();}
}