Monitor的code如下,非常简单:
public static class Monitor { public static extern void Enter(Object obj); public static void Enter(Object obj, ref bool lockTaken) { if (lockTaken) ThrowLockTakenException(); ReliableEnter(obj, ref lockTaken); Contract.Assert(lockTaken); } private static extern void ReliableEnter(Object obj, ref bool lockTaken); public static void TryEnter(Object obj, ref bool lockTaken) { if (lockTaken) ThrowLockTakenException(); ReliableEnterTimeout(obj, 0, ref lockTaken); } private static extern void ReliableEnterTimeout(Object obj, int timeout, ref bool lockTaken); public static extern void Exit(Object obj); public static bool Wait(Object obj, int millisecondsTimeout, bool exitContext) {