Внутренняя реализация Lock (Monitor) в .NET

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

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

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

33
задан alexber 25 February 2011 в 14:31
поделиться