lock对象时使用Monitor.Exit导致异常

lock (obj)
            {
                Console.WriteLine(System.DateTime.Now);
                //Monitor.Exit(obj);
                Thread.Sleep(3000);
                Console.WriteLine(System.DateTime.Now);
            }

代码如上,如果Monitor.Exit(obj);这段代码不注销的话,就会出现“从不同步的代码块中调用了对象同步方法”错误,

当前代码环境是net 3.5 sp1,此时lock相当于

Monitor.Enter(obj);
            try
            {
                Monitor.Exit(obj);
            }
            finally
            {
                Monitor.Exit(obj);
            }

测试原因就是我在try内部执行Monitor.Exit(obj);后,obj已经被释放锁了,而finally内部再次执行Monitor.Exit(obj);时,此时因为当前线程对象锁已被释放,所以就抛异常了,同理Monitor.TryEnter(obj);后不管结果为false而继续执行Monitor.Exit(obj);同样会导致“从不同步的代码块中调用了对象同步方法”错误

 

你可能感兴趣的:(lock对象时使用Monitor.Exit导致异常)