Это не было бы "проблемой", если бы следовали этой модифицированной параллельной форме совета:
В общем, избегайте блокировки открытого типа или экземпляров , которые вы не создали или не определили . Общие конструкции lock (this)
, lock (typeof (MyType))
нарушают это правило , если вы не создали экземпляр или не объявили тип ..
Однако, поскольку вышеприведенное «не может быть гарантировано» для общедоступных типов или доступных экземпляров всего встречающегося кода, MSDN и другие источники утверждают, что их следует избегать при защитном программировании против единственного числа потенциальная трудно обнаруживаемая проблема во время выполнения (тупик) . Это хороший совет, учитывая, что большинство программистов не очень хорошо разбираются в правилах.
.. и тот, кто сталкивался с такой ошибкой в дикой природе, был бы гораздо более непреклонен в том, что не разрешает повторение этой конкретной проблемы, навязывая изложенные рекомендации. (Java 1.0 / 1.1 с моделью интерфейса пользователя с резьбой AWT была особенно проблематичной.)
Случай lock ("mylock")
является особенным в том смысле, что его следует избегать из-за интернирования строк, поскольку обычно невозможно «узнать», нарушают ли они приведенный выше совет.