2012-03-08 27 views
1

我试图在Java中实现下面的伪解决方案作为一项任务的一部分。该伪代码是针对读者偏好程序,具体是读者程序本身。有一个陪同的作家过程,但为了保持简洁,我没有打扰它的粘贴。读者与作者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 

从其他代码的输出已经有点乱,但它似乎工作。为了使输出到控制台更具可读性,我使用了延迟,尽管我对使用延迟很担心,因为这似乎很可能干扰结果,因为我正在给作者进程更长的延迟。理论上说,锁定系统应该是健全的,而延迟应该使输出到控制台更具可读性。

那么,我是否正确使用if语句以上?

你能给我任何提示上输出数据到控制台,以证明它的作品,因为它应该(读者偏好/作家偏好)

回答

0

线

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

是一个原子过程,代码下面自动进行。

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