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);同样会导致“从不同步的代码块中调用了对象同步方法”错误

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值