Monitor.Exit抛异常,为什么呢?

都说Monitor.Enter/Exit需要引用类型作为参数才可以保证线程安全,我就想使用值类型看看会出现什么效果.代码如下:

     class MyClass
    {
       private int value_lock = 0;
        public void DoWork()
        {
            Monitor.Enter(value_lock);
            Trace.WriteLine("Thread Name : " + Thread.CurrentThread.Name);
            string sb = string.Empty; ;
            for (int i = 0; i <= 50000; i++)
            {
                sb += i.ToString();
            }
            Trace.WriteLine("Over");
            Monitor.Exit(value_lock);

        }
    }

            class Program
    {
        static void Main(string[] args)
        {
            Trace.Listeners.Add(new TextWriterTraceListener(Console.Out));
            Trace.AutoFlush = true;
            MyClass monitor_class = new MyClass();
            Thread m_thread_1 = new Thread(monitor_class.DoWork);
            m_thread_1.Name = "Monitor Thread 1";
            Thread m_thread_2 = new Thread(monitor_class.DoWork);
            m_thread_2.Name = "Monitor Thread 2";
            m_thread_1.Start();
            m_thread_2.Start();
        }

    }

在Main()中定义了两个线程去模拟多线程操作.奇怪的是,当第二个线程调用Exit后却抛出了SynchronizationLockException异常.原先认为两个线程肯定同时执行,无法保证线程安全,但是现在出现了异常,百思不得其解...希望哪位大侠能解释的明白些.