少し燃え尽きていると思いますので、ばかげた質問でしたらお詫び申し上げます。次のコードがあるとします。
public void updatePrices()
{
synchronized (singleton_price_db)
{
singleton_price_db.modifyPrices();
singleton_propagator.propagatePricesToOtherServers();
}
}
これで、実行中のスレッドがこのコードを実行すると、価格db(singleton_price_db)がロックされ、更新された価格を他のサーバーに伝播するようにシングルトンファイルプロパゲーターに警告します。ただし、シングルトンプロパゲーターが実行されているため、同期ロックはもうありませんね。これはどのように処理できますか?(RAMの変更価格と、他のサーバーに伝播される価格の両方を同期する必要があります。実行中のスレッドからも、propagatePricesToOtherServers()メソッドの呼び出しを許可することはできません。これにより、他のホストが発生するためです。同期の問題。)
編集:私がやろうとしていることをもう少し詳しく説明することはできますが、私のデザインを使用した解決策が存在しない可能性があります。基本的に、データ構造の周りに同期ブロックが必要な2つのスレッドがあります。最初のスレッドがタスクを終了すると、他のスレッドから変更されることなく、同期ブロックをプロパゲータースレッド(2番目のスレッド)に渡す必要があります。上にあるマネージャースレッドのように、多くの余分な機械を追加しないと、すぐに解決策が見当たらないので、この問題を処理する方法かもしれません。