以下で実行されるメソッドで動作する 2 つのスレッドがあるとします。
while(true){
if(Queue.Count() <= 0){
wait();
}
object anObject = Queue.Dequeue();
}
Queue に 1 つの要素 init があり、スレッド 1 が Queue.Count 行を実行しようとしており、スレッド 2 が Queue.Dequeue() にあり、実行優先度がスレッド 1 にある場合に問題が発生します。
この状況が発生すると、Queue.Count() が 1 を返し、空のキューからオブジェクトをデキューしようとするため、スレッド 1 は例外をスローします。どうすればこれを処理できますか? 安全にデキューしたい場合の最善の解決策は何ですか? 同期を使用するか、何かをロックする必要がありますか?
よろしく、 ケマル