Implementação interna de bloqueio (monitor) no .NET

Para dominar alguma tecnologia, você precisa saber como ela é feita em um nível de abstração menor. No caso de programação multithreading, será bom conhecer as primitivas de sincronização.
Aqui está a pergunta, como o Lock (Monitor) implementado no .NET?

Estou interessado em tais pontos:
- utiliza objetos do sistema operacional ?;
- requer modo de usuário ou modo de kernel ?;
- o que é overhead para threads que aguardam bloqueio ?;
- em que casos a fila de espera que aguarda o bloqueio pode ser violada?

Atualizada:
"Se mais de um encadeamento contiver o bloqueio, eles serão colocados em uma fila" pronta "e receberão o bloqueio por ordem de chegada.Nota: Nuances no comportamento do Windows e do CLR significam que a justiça da fila às vezes pode ser violada."[C # 4.0 em poucas palavras, Joseph Albahari] Então é sobre isso que pergunto na última pergunta sobre 'fila violada'.

questionAnswers(2)

yourAnswerToTheQuestion