【发布时间】:2015-01-19 01:40:40
【问题描述】:
它在维基百科中说,下面的代码“添加了不允许任何线程饿死的约束”,我不明白为什么没有饿死。 例如:如果有很多作者在任何读者之前到达并且第一个作者花了很长时间才完成他的写作,那么 r 可能会达到一些大的负数,比如说 -12345 并且在它之后读者开始与作者一起到达,并且不知何故,操作系统总是选择写入器而不是读取器来获取信号量,在这种情况下,读取器会饿死,这是对还是我错了? 链接:readers-writers problem
查看链接中的第三个读写器问题。
代码:
int readcount; // (initial value = 0)
semaphore mutex_rdcnt, r, w; // ( initial value = 1 )
//READER
wait(r);
wait(mutex_rdcnt);
readcount++;
if (readcount == 1)
wait(w);
signal(mutex_rdcnt);
signal(r);
// reading is performed
wait(mutex_rdcnt);
readcount--;
if (readcount == 0)
signal(w);
signal(mutex_rdcnt);
//WRITER
wait(r);
wait(w);
// writing is performed
signal(w);
signal(r);
【问题讨论】:
标签: operating-system semaphore