Это подробно обсуждается в Clr Via C #, Джеффри Рихтер называет это «гибридной блокировкой». В пользовательском режиме монитор вращается и конкурирует с другими потоками (так как они не заблокированы), после того как они переведены на блокировки режима ядра, они блокируются, таким образом освобождая циклы.

овладеть какой-то технологией, нужно знать, как это делается на уровне ниже абстракции. В случае многопоточного программирования будет полезно узнать о примитивах синхронизации.
Вот вопрос, как реализован Lock (Monitor) в .NET?

Меня интересуют такие моменты:
- использует ли она объекты ОС?
- требуется ли пользовательский режим или режим ядра ?;
что такое издержки для потоков, ожидающих блокировки?
- в каких случаях очередь потоков, ожидающая блокировки, может быть нарушена?

Обновлено:
«Если несколько потоков конкурируют с блокировкой, они помещаются в очередь в« очереди готовности »и получают блокировку по принципу« первым пришел - первым обслужен ».Примечание: нюансы в поведении Windows и CLR означают, что справедливость очереди иногда может нарушаться.«[C # 4.0 в двух словах, Джозеф Албахари] Так вот о чем я спрашиваю в последнем вопросе о« нарушенной очереди ».

Ответы на вопрос(2)

Ваш ответ на вопрос