我正在尝试在java中实现下面的伪解决方案作为赋值的一部分。伪用于读者偏好程序,特别是读者进程本身。有一个伴随的作家过程,但为了保持简洁,我没有费心去粘贴它。
Process Reader[i=1 to M] {
while (true) {
/* Implementing <await (nw == 0) nr = nr+1;> */
P(e);
if (nw > 0) {dr = dr+1; V(e); P(r);}
nr = nr + 1;
if (dr > 0) {dr = dr-1; V(r);}
else V(e);
read the database;
/* Implementing <nr = nr-1;> */
P(e);
nr = nr - 1;
if (nr == 0 and dw > 0) {dw = dw-1; V(w);}
else V(e);
}
}
最初我认为该行:
/* Implementing <await (nw == 0) nr = nr+1;> */
对正在发生的事情做了某种评论,但刚刚重新阅读它我认为它应该是一个 if语句来控制P(e)锁定信号量。以下是基于上述假设我在代码中实现的内容。
if (nw == 0) {
nr = nr++;
try {
e.acquire();//P(e)
} catch (InterruptedException e) {
}
}//end if
其余代码的输出有点混乱,但似乎有效。我使用thread.sleep的延迟,以使输出到控制台更具可读性,并且它似乎没问题,虽然我对使用延迟很谨慎,因为这似乎很可能会干扰结果,因为我给了编写器进程一个更长的延迟。从理论上讲,锁定系统应该是合理的,延迟应该只是使输出到控制台更具可读性。
那么,我是否正确使用上面的 if语句?
您能否向我提供有关向控制台输出数据的任何提示,以证明其工作正常(读者偏好/作者偏好)
答案 0 :(得分:0)
该行
/* Implementing <await (nw == 0) nr = nr+1;> */
是一个原子过程,下面的代码以原子方式进行。
如果有人对另一个问题感兴趣,只需在获取/发布下添加打印语句。