Implementazione interna di Lock (Monitor) in .NET

Per padroneggiare alcune tecnologie devi sapere come è fatto a un livello di astrazione più basso. In caso di programmazione multithreading, sarà utile conoscere le primitive di sincronizzazione.
Ecco la domanda, come implementato Lock (Monitor) in .NET?

Sono interessato a questi punti:
– utilizza oggetti OS ?;
– richiede la modalità utente o la modalità kernel ?;
– qual è il sovraccarico per i thread che stanno aspettando il blocco ?;
– in quali casi potrebbero essere violati i fili che attendono la chiusura ?.

aggiornato:
“Se più di un thread contende il blocco, vengono messi in coda su una” coda pronta “e hanno concesso il blocco in base all’ordine di arrivo. Nota: le sfumature nel comportamento di Windows e CLR indicano che l’equità di la coda può a volte essere violata. “[C # 4.0 in a Nutshell, Joseph Albahari] Quindi questo è ciò che sto chiedendo nell’ultima domanda riguardante la” coda violata “.