Поменяли object на Lock — и два потока встретились в критической секции — 1 октября 2026 г. в 23:36:31.506
Поменяли object на Lock — и два потока встретились в критической секции В .NET 9 появился новый тип System.Threading.Lock, рекомендуемый как замена object для синхронизации. Но компилятор разворачивает lock по-разному для каждого типа: для object используется Monitor, а для Lock — собственный механизм EnterScope().Проблема возникает, когда один экземпляр Lock попадает в переменную типа object или передаётся через универсальный метод — два потока начинают захватывать разные механизмы блокировки на одном объекте, нарушая взаимное исключение (в тесте зафиксировано 106 тысяч одновременных входов в «критическую секцию»). Решение: включить предупреждение CS9216 как ошибку сборки, избегать универсальных обёрток с lock по параметру типа и хранить замки как явный Lock, а не object. https://habr.com/ru/companies/otus/articles/1087292/