我不太明白为什么第一个读者-写作者问题会让写进程挨饿,即:代码是如何为读者进程提供优先级的?当其中一个读者进程执行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);
}