次の状況を考慮してください。
複数のスレッドで使用されるオブジェクト foo があり、foo でメソッド bar() を繰り返し呼び出す場合としない場合があります。
foo の状態を決して変更しないため、bar() が複数回並行して実行されることはまったく問題ありません (そして望ましいことです)。
問題は、外部から foo の状態を変更する必要がある場合に発生します (「ワーカー」スレッドの 1 つからではなく、別のスレッドから) - 最後のワーカー スレッドまで呼び出しスレッドがブロックされるように foo をロックするにはどうすればよいですか? bar() で完了し、foo を再び解放するまで、すべてのワーカー スレッドが bar() でブロックされますか?
明らかに、bar() の実行中にロックされたままのミューテックスを使用することはできません。
何か案は?または、これらのタイプの問題に対するより良い設計はありますか?