Concurrency 读者与作者同步问题

Concurrency 读者与作者同步问题,concurrency,process,synchronization,readerwriterlock,Concurrency,Process,Synchronization,Readerwriterlock,我很难理解为什么第一个读写器问题会导致写进程匮乏,即:代码如何为读写器进程提供优先级?当一个读卡器进程执行信号(wrt)时,写入程序进程是否不能获得锁?信号量的列表是以优先于读卡器进程的方式构造的(正如我所看到的那样,后进先出列表中的读卡器进程的稳定流会让编写者感到饥饿),还是我误解了一些基本的东西 semaphore wrt=1,mutex=1; readcount=0; writer() { wait(wrt); //writing is done signal(wr

我很难理解为什么第一个读写器问题会导致写进程匮乏,即:代码如何为读写器进程提供优先级?当一个读卡器进程执行
信号(wrt)
时,写入程序进程是否不能获得锁?信号量的列表是以优先于读卡器进程的方式构造的(正如我所看到的那样,后进先出列表中的读卡器进程的稳定流会让编写者感到饥饿),还是我误解了一些基本的东西

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个或更多读卡器处于活动状态,则在读卡器块末尾永远不会调用
信号(wrt)
。新的读卡器不会有
readcount==1
,因此他们不会等待wrt,但会增加readcount。这使得无休止的读取请求耗尽写入线程。如果读卡器计数曾经达到0,那么wrt将被释放,编写器最终可以工作。在此之前,读者享有优先权

确切地说,这不是后进先出的方法,而是读卡器具有优先级的优先级队列