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

时间:2012-03-08 03:42:48

标签: java semaphore

我正在尝试在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语句

您能否向我提供有关向控制台输出数据的任何提示,以证明其工作正常(读者偏好/作者偏好)

1 个答案:

答案 0 :(得分:0)

该行

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

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

如果有人对另一个问题感兴趣,只需在获取/发布下添加打印语句。