スレッドの呼び出しの進行状況が 2 つの変数の状態に依存するシステムを構築しています。1 つの変数が (クライアント スレッドとは別の) 外部ソースによって散発的に更新され、両方の変数の条件で複数のクライアント スレッドがブロックされます。システムはこんな感じ
TypeB waitForB() { // Can be called by many threads.
synchronized (B) {
while (A <= B) { B.wait(); }
A = B;
return B;
{
}
void updateB(TypeB newB) { // Called by one thread.
synchronized (B) {
B.update(newB);
B.notifyAll(); // All blocked threads must receive new B.
}
}
更新された B の新しい値を受け取るには、すべてのブロックされたスレッドが必要です。しかし、問題は、単一のスレッドが終了して A を更新すると、待機状態が再び真になり、他のスレッドの一部がブロックされ、B の新しい値を受け取らないことです。 B の更新 A でブロックされましたか、またはこの動作を取得する別の方法ですか?