Что делает lock(obj) под капотом и почему плохая идея — блокировать this или строку?
Компилятор разворачивает в try { Monitor.Enter(obj); } finally { Monitor.Exit(obj); }, монитор реентерабелен и висит на объекте. Блокировка this/публичных объектов/строк опасна: внешний код может их тоже залочить (строки интернируются) → риск дедлоков и лишнего контеншна.
Библиотека собеса по С#
Post #1004
1.89K
- ❤ 4