读者 - 作者同步问题

问题描述:

我很难理解为什么第一个读者 - 作者问题会使写入过程陷于挨饿,即:代码如何为读者过程提供优先权?当其中一个阅读器进程执行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方法,而是读者优先考虑的优先级队列。

+0

完美,我错过了,感谢您解释它! – mino 2013-04-10 17:33:35