操作系统中的读写者经典问题

第一类读者-写者问题:读者优先

除非有写者在写文件,否则没有一个读者需要等待。

分析思想:

 

读者到:

1)无读者、写者,新读者可以读

2)有写者等,但有其它读者正在读,则新读者也可以读

3)有写者写,新读者等

写者到:

1)无读者,新写者可以写

2)有读者,新写者等待

3)有其它写者,新写者等待

 


信息量:

readcount = 0 ——记录当前正在读的读者进程数,这是一个共享变量,需要互斥使用

mutex = 1 ——互斥信息量

write = 1 ——用于写者互斥,或第一个读者和最后一个读者与写者互斥

 

 

READ:
   Repeat;
       P(mutex);
       readcount:=readcount+1;
       if(readcount=1)
           P(write);
       V(mutex);
       读文件
       P(mutex);
       readcount:=readcount-1;
       if(readcount=0)
           V(write);
       V(mutex);
   Until false


WRITE:
   Repeat
       P(write);
       写文件
       V(write);
   Until false;
 


 

1.2       第二类读者-写者问题:写者优先

一旦一个写者到来,它应该尽快对文件进行写操作。则新来到的读者不允许进行读操作。

分析思想: 


读者到:

1)  无读者且无写者,新读者读

2)  有读者但无写者等待,新读者读

3)  有读者但有写着等待,读者等待

4)  有写者在写,新读者等待

写者到:

1)  无读者且无写者,新写者写

2)  有读者在读,新写者等待

3)  有写者写,新写者等待

 


信息量:

read:=1 ——读者信息量,用于第一个写者与读者互斥

readcount:=0 ——记录当前读者的进程数

mutex:=1 ——互斥信息量

writecount:=0 ——记录当前写者排队的进程数

write:=1 ——写者信息量,用于写者互斥,第一个读者与写者互斥

mutex2:=1 ——互斥信息量

 

READ:
   Repeat
       P(read)
       P(mutex)
       readcount:=readcount+1;
       if(readcount=1)
           P(write)
       V(mutex)
       V(read)
       读文件
       P(mutex)
       readcount:=readcount-1
       if(readcount=0)
           V(write)
       V(mutex)
   Until false
 

WRITE:
   Repeat
       P(mutex2)
       writecount:= writecount+1
       if(writecount=1)
           P(read)
       V(mutex2)
       P(write)
       写文件
       V(write)
       P(mutex2)
       writecount:=writecount-1
       if(writecount=0)
           V(read)
       V(mutex2)
   Until false;


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值