2012-03-08 59 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;> */ 

是一個原子過程,代碼下面自動進行。

如果有人對另一個問題感興趣,只需在獲取/發佈下添加打印語句即可。