gpt4 book ai didi

java - 读者和作者 Java 解决方案查询(条件信号量 | 传递接力棒)

转载 作者:行者123 更新时间:2023-12-01 05:26:28 25 4
gpt4 key购买 nike

我正在尝试在 java 中实现下面的伪解决方案作为作业的一部分。伪值用于Readers Preference程序,特别是读者进程本身。有一个附带的编写过程,但为了保持简洁,我没有费心粘贴它。

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 语句是否正确?

您能否给我一些有关将数据输出到控制台的提示,以证明它可以正常工作(读者偏好/作者偏好)

最佳答案

线路

/* Implementing <await (nw == 0) nr = nr+1;> */

是一个原子过程,下面的代码以原子方式执行该过程。

如果有人对其他问题感兴趣,只需在获取/发布下添加打印语句即可。

关于java - 读者和作者 Java 解决方案查询(条件信号量 | 传递接力棒),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9612583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com