class x
{
Object lockOne = new Object();
Object lockTwo = new Object();
List<Something> listOne = new List<Something>();
List<Something> listTwo = new List<Something>();
void MethodOne()
{
lock(lockOne)
{
// some operation on listOne
}
}
void MethodTwo()
{
lock(lockTwo)
{
// some operation on listTwo
}
}
}
はMethodOne()
とMethodTwo()
が同時にlistOne
とlistTwo
はとにかく関連していないことを指摘し、異なるスレッドから呼び出すことができると仮定して2つのロックオブジェクトを使用することは正しいです。ロックに関連する操作は、上記のコメントで指定された操作だけです。
:次のコードは以下のコード、少ないオーバーヘッドと誤って間違ったロックを使用することの少ないチャンスで、同じようにうまく動作します独立した。 – assylias
それは常識と呼ばれるべきであり、逆にすることは非常に悪い習慣です。 – Dariusz
[ReaderWriterLock](http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim.aspx)を使用して調べたいことがあります。リストからのみ読み込みを行っている場合は、複数のスレッドが同時に使用することができます( 'List'はスレッドセーフ読み取りを持っています)。ロックの更新を書く必要があると、1つのスレッドしか書き込めず、その後、複数のリーダーが再び開始することができます。 –