读者 - 作者同步问题
问题描述:
我很难理解为什么第一个读者 - 作者问题会使写入过程陷于挨饿,即:代码如何为读者过程提供优先权?当其中一个阅读器进程执行signal(wrt)
时,作者进程是否无法获得锁定?信息量列表是否是结构化的(正如我可以看到作者将如何在LIFO列表中以稳定的阅读器流程饥饿),从而优先考虑读者进程,还是我误解了一些基本的东西?读者 - 作者同步问题
semaphore wrt=1,mutex=1;
readcount=0;
writer()
{
wait(wrt);
//writing is done
signal(wrt);
}
reader()
{
wait(mutex);
readcount++;
if(readcount==1)
wait(wrt);
signal(mutex);
///Do the Reading
///(Critical Section Area)
wait(mutex);
readcount--;
if(readcount==0)
signal(wrt);
signal(mutex);
}
答
如果你总是有2名或更多的读者活跃,signal(wrt)
将永远不会得到所谓的读者块的结尾。新读者不会有readcount == 1
,所以他们不会等待wrt,但他们会增加读数。这使得不断发出的读取请求使作者线程陷于瘫痪。如果读者数量达到0,那么wrt将被释放,作者终于可以工作。在此之前,读者有优先权。
这不是精确的LIFO方法,而是读者优先考虑的优先级队列。
完美,我错过了,感谢您解释它! – mino 2013-04-10 17:33:35