私は以下の疑似ソリューションを割り当ての一部として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;> */
が発生していたものにコメントの一部のようなものだったが、それは私が声明にあれば、ことになっていると思うだけで再読み込み持ちますP(e)ロックセマフォを制御する。以下は上記の前提に基づいて私のコードで実装したものです。
if (nw == 0) {
nr = nr++;
try {
e.acquire();//P(e)
} catch (InterruptedException e) {
}
}//end if
残りのコードの出力はちょっと混乱していますが、うまくいくようです。私はwritersプロセスに与えていたので、結果を妨げる可能性が高いと思われたので、私は遅延を使用することには注意が払われましたが、出力をより読みやすくするためにthread.sleepで遅延を使用しました。より長い遅延。しかし、理論的には、ロッキングシステムは健全でなければならず、遅れはコンソールをより読みやすくするだけですべきです。
したがって、上記の文のifを正しく使用していますか?
あなたは私にそれが(読者の嗜好/ライターの好み)必要として、それが動作するか検証するために、コンソールにデータを出力上の任意のヒントを与えることができます