Ответ 1
-
lock(x)
синхронизируется с другой блокировкой для каждого экземпляра типа -
lock(typeof(X))
синхронизирует одну и ту же блокировку для всех экземпляров типа
Всегда блокировать частный объект блокировки:
public class X
{
private readonly Object _lock = new Object();
// ...
lock (_lock)
{
}
Если вы должны синхронизировать доступ к элементам класса static, используйте один и тот же шаблон:
public class X
{
private readonly static Object s_lock = new Object();