Я прочитал несколько статей и сообщений, в которых говорится, что lock(this)
, lock(typeof(MyType))
, lock("a string")
- это плохая практика, потому что другой поток может заблокировать один и тот же ключ и вызвать тупик. Чтобы понять эту проблему, я пытался создать образец кода, чтобы проиллюстрировать тупик, но не смог обернуть это вокруг.
Может ли кто-нибудь написать сжатый фрагмент кода, который иллюстрирует эту классическую проблему? Пожалуйста, держите его коротким, я могу переваривать код только в небольших кусках.
Изменить Я думаю, что Лассевк подводит итог; что реальная проблема в том, что вы потеряли контроль над своими замками. Как только это произойдет, вы не сможете контролировать порядок вызывания блокировок, и вы разрешаете потенциальную ситуацию взаимоблокировки.
lock(this)
, lock(typeof(MyType))
и т.д., все это ситуации, когда вы выбрали блокировку, которую невозможно контролировать.