Когда вы блокируете объект, блокируется ли этот объект во всем приложении?
Например, этот фрагмент из C # 3.0 в разделе Nutshell 19.6.1 «Типы безопасности потоков и .NET Framework»:
static void AddItems( )
{
for (int i = 0; i < 100; i++)
lock (list)
list.Add ("Item " + list.Count);
string[] items;
lock (list) items = list.ToArray( );
foreach (string s in items) Console.WriteLine (s);
}
Блокирует ли первый:
lock (list)
list.Add ("Item " + list.Count);
запретить доступ другому потоку:
lock (list) items = list.ToArray( );
или оба могут быть выполнены одновременно?
А CLR автоматически делает ваши статические методы потокобезопасными? Или это до разработчика?
Спасибо,
John