在.NET中锁定(监视)内部实现

为了掌握某些技术,您必须知道它是如何在较低的抽象级别上实现的。在多线程编程的情况下,最好了解同步原语。
这里有一个问题,如何在.NET中实现锁(监视器)?
我对这些观点很感兴趣:
-它使用操作系统对象吗?;
-它需要用户模式还是内核模式?;
-等待锁的线程的开销是多少?;
-在什么情况下,等待锁的线程队列可能被违反?.
更新时间:
如果有多个线程争用该锁,则它们将在“就绪队列”上排队,并在先到先服务的基础上授予该锁。注意:windows和clr行为中的细微差别意味着有时会违反队列的公平性。“[c 4.0简而言之,Joseph Albahari]所以这是我在最后一个关于“违反队列”的问题中要问的问题。


最佳答案:

Wikipedia article对什么是“监视器”以及它的底层技术条件变量有很好的描述。
请注意,.NET监视器是条件变量的正确实现;大多数已发布的win32 cvs实现都是不正确的,即使是在Dobbs博士等信誉良好的来源中也有。这是因为cvcannot easily be built from the existing Win32 synchronization primitives
NET CV实现不只是在win32原语上构建一个浅的(和不正确的)包装器,而是利用它在.NET平台上、实现自己的等待队列等这一事实。