Operating System-work3

下面对一个写者/多个读者问题的解法错在哪里?
int readcount;        
Semaphore mutex, wrt;   
//写者            

semWait ( wrt );
/*执行写操作*/
semSignal ( wrt );
//共享,初值为0
//共享,初值为1
//读者
semWait ( mutex);
readcount := readcount + 1;
if readcount == 1 then senWait ( wrt )
semSignal ( mutex);  
  /* 执行读操作 */
semWait ( mutex);
readcount := readcount - 1;
if readcount == 0 then Up ( wrt);
semSignal ( mutex);

A:这个问题应该是跟单个读者单个写者差不多,在这个问题中写者可能会存在“饥饿”问题。假设读者A和读者B同时读取,所以计数器为2,当他们一起读取的时候,读者A完成,那么计数器减1,又立刻请求再次读取,那么计数器就会回到2,那样计数器就永远回不到0,写者的程序就会被卡死,就会发生饥饿。

Teacher’s Supplement:读者写者问题中,一般都是多个读者或多个写者。单个读者写者之间,只存在最简单的互斥问题。

Understanding:因为用信号量解决读者/写者问题需要满足下列条件:一、允许多个读者同时执行读操作;二、不允许多个写者同时操作;三、不允许读者写者同时操作。所以个人觉得情况都差不多,大不了都是读者“占着茅坑不拉屎”,没办法让写者进临界区写数据,发生“饥饿”问题。

发布了42 篇原创文章 · 获赞 5 · 访问量 2689

猜你喜欢

转载自blog.csdn.net/weixin_44198992/article/details/105173263