Какие гарантии и ограничения даёт lock в C# при работе с многопоточностью?
Короткий ответ: обеспечивает взаимное исключение по одному и тому же объекту и полные барьеры памяти (acquire на входе, release на выходе; «happens-before» между секциями по тому же объекту), но не гарантирует справедливость/очередность, не предотвращает дедлоки и не синхронизирует потоки, использующие разные объекты.
Библиотека собеса по С#
Post #1123
1.48K