码迷,mamicode.com
首页 > 其他好文 > 详细

Monitor类:Object synchronization method was called from an unsynchronized block of code.

时间:2015-02-06 21:45:36      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:

最近,在维护以前老系统的时候,发现了这样一个错误:Object synchronization method was called from an unsynchronized block of code.

由于是老系统,代码是Framework 1.0的版本,距离现在都快10年了。很多以前的DLL源代码,都无法找到。只能根据抛出的异常信息,从网上查询资料。

调查后,发现这个问题是由于Monitor抛出的,最后反编译抛出异常的DLL,证实了这个猜测。

MSDN上,在Monitor类介绍中,对本文开篇提及到的这个异常进行了特别的说明:Monitor对象的Enter Exit方法,传递的参数应该是引用类型,而不是值类型,如果传递是值类型,则就会抛出本文开头提到的问题。这是由于值类型的参数,在传到到Enter或Exit方法后,会进行装箱,但是两次的装箱操作是各自独立的,编译器认为,装箱后生成的两个变量 是 不相同的。

MSDN地址:https://msdn.microsoft.com/en-us/library/hf5de04k(VS.71).aspx

 

进一步可以理解为,Monitor对象的Enter Exit方法是成对出现的,如果前后两个方法传递的参数不同则会报Object synchronization method was called from an unsynchronized block of code.的错误。诸如:在Enter传递参数后,在后续的代码中修改了参数,在调用Exit的时候 就会报错。

Monitor类:Object synchronization method was called from an unsynchronized block of code.

标签:

原文地址:http://www.cnblogs.com/Destiny-zhl/p/4277993.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!