複数のスレッドで同期する必要があります。スレッドは作成しませんが、いくつあるかはわかります。だから私はこの内側のガードされたブロックを書きました:
private class Guard {
int waiters = 0;
boolean wait;
synchronized void addWaiter() {
++waiters;
wait = true;
while (wait && waiters != threadNum()) {
try {
wait();
} catch (InterruptedException e) {}
}
waiters = 0;
wait = false;
notifyAll();
}
}
この保護されたブロックはループで実行されます。したがって、問題は、最初の呼び出しからのすべてのスレッドがwait()
ループから解放される前に、2回目に呼び出される可能性があることです。これにより、ガードのロジック全体が明らかに台無しになります。したがって、ガードから解放される前に、スレッドを何らかの方法で結合させる必要があります。このためのデザインはありますか?それを達成するための最もエレガントな方法は何ですか。スレッドは私が作成したものではないことに注意してください。
ありがとう。