次のコードを検討してください。
static void AddItem()
{
lock (_list)
_list.Add ("Item " + _list.Count); //Lock 1
string[] items;
lock (_list)
items = _list.ToArray(); //Lock 2
foreach (string s in items)
Console.WriteLine (s);
}
スレッドAがロック2を取得し、スレッドBがロック1を取得しようとした場合、Bはロックを取得しますか?両方のロックが同じロックオブジェクトを使用していることを考慮してください。