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将被释放,编写器最终可以工作。在此之前,读者享有优先权
确切地说,这不是后进先出的方法,而是读卡器具有优先级的优先级队列