キューにキューがあるモジュールがあるとします。.NET - Queue.Enqueueメソッドは安全ですか?
エンキューに他のエンティティのために、彼らは機能を経由しなければならない:私は複数のスレッドが動作している場合は
public sub InsertIntoQueue(Obj)
MyQueue.Enqueue(Obj)
end sub
を、彼らはInsertIntoQueue()を呼び出したい、この見なさスレッドは安全なのですか?
InsertIntoQueue()関数を実行するために必要なメモリ内に命令のコピーが1つしかないと思っていますが、スレッドセーフであると思うようになります。
しかし、2つのスレッドが同時にこの関数を実行しようとするとどうなりますか?
このスレッドは安全ですか?そうでない場合は、どうすればスレッドセーフにすることができますか? (速度とメモリ使用に関するパフォーマンスの影響は何か)
私の計画は、複数のスレッドをエンキューすることと、キュー全体を特定の間隔でロックしてフラッシングする単一のスレッドです。 –
キュー内のすべてのオブジェクトを処理している間にロックすると、エンキューしているすべてのスレッドはデキュースレッドが終了するまでブロックされます(エンキューしようとするとブロックされます)。それぞれの空のチェックとデキューをロックする方がよい場合がありますキュー全体の処理ではなくオブジェクトを使用します。 – Matt