我有共享内存,x写程序,y读程序,单亲进程。作家有独家访问权,因此一个作家可以写作,其他读者和作家必须等待。多个读卡器可以并行读取。优先权在writer上,例如,如果有3个读卡器正在读,而有一个读卡器要写入共享内存,那么当这3个读卡器完成工作时,就没有更多的读卡器可以读写了。我不知道如何通过信号量实现它,因为读者可以并行阅读,所以下一个代码将不起作用,因为那时所有的读者都将在那个信号量中等待。
//reader
if(isWriterActive())
{
sem_wait(semReaderStop);
}
//writer
sem_wait(semReaderStop());
.
.
sem_post(semReaderStop());
我觉得这样的东西不好,因为它没有阻塞。
//readers doJob
if(isWriterActive())
{
return E_WRITER_ACTIVE;
}
while(doJob()==E_WRITER_ACTIVE);
最佳答案
您需要一个Pthreads reader/writer锁-在Linux NPTL上有一些关于writer饥饿的背景信息。