スレッドセーフであることを確認する必要がある Queue オブジェクトがあります。次のようなロック オブジェクトを使用する方がよいでしょうか。
lock(myLockObject)
{
//do stuff with the queue
}
または、次のように Queue.Synchronized を使用することをお勧めします:
Queue.Synchronized(myQueue).whatever_i_want_to_do();
MSDNのドキュメントを読むと、Queue.Synchronizedを使用してスレッドセーフにする必要があると書かれていますが、ロックオブジェクトを使用した例が示されています。MSDN の記事から:
Queue のスレッド セーフを保証するには、すべての操作をこのラッパーのみで行う必要があります。
コレクションの列挙は、本質的にスレッドセーフな手順ではありません。コレクションが同期されている場合でも、他のスレッドは引き続きコレクションを変更できるため、列挙子は例外をスローします。列挙中のスレッド セーフを保証するには、列挙全体でコレクションをロックするか、他のスレッドによる変更に起因する例外をキャッチします。
Synchronized() を呼び出してもスレッドセーフが保証されない場合、そのポイントは何ですか? ここで何か不足していますか?