我有兴趣在读者/作者信号量解决方案中导致失败,作者优先。
在以下代码中,取自 Wikipedia:
READER
P(mutex_3);
P(r);
P(mutex_1);
readcount := readcount + 1;
if readcount = 1 then P(w);
V(mutex_1);
V(r);
V(mutex_3);
reading is performed
P(mutex_1);
readcount := readcount - 1;
if readcount = 0 then V(w);
V(mutex_1);
...有一个二进制信号量mutex_3
,它限制了试图访问r
信号量的线程数,以便编写器具有优先权。
我试图删除那个互斥锁,以为作家会饿死,但没有成功。我用 Java 编写了一个程序,其中线程等待固定的时间两次:在读/写之后和期间。我创建了一个写入进程和 8 个读取进程,并将等待时间设置为 1 毫秒。我尝试创造一种情况,其中r
信号量不断受到一位作家和许多读者的攻击。这些都没有导致我预期的失败。
难道我做错了什么?我怎样才能导致作家挨饿?