最近,在维护以前老系统的时候,发现了这样一个错误:Object synchronization method was called from an unsynchronized block of code. 由于是老系统,代码是Framework 1.0的版本,距离现在都快10年了.很多以前的DLL源代码,都无法找到.只能根据抛出的异常信息,从网上查询资料. 调查后,发现这个问题是由于Monitor抛出的,最后反编译抛出异常的DLL,证实了这个猜测. MSDN上,在Monitor类介绍中,对本文…
synchronized 自从Java提供了多线程编程,我们经常需要处理这样的情况:在特定的时间,我们需要限制访问,确保只有一个线程访问我们的代码.Java提供了同步关键字synchronized来实现这种访问控制,但是使用synchronized会存在一些问题.第一个问题是,当我们需要调用线程的wait()方法时,我们必须记得去使用while循环.看下面例子,来自guava monitor api上的说明: public class SafeBox<V> { private V value;…
前面我们讲过了lock的用法以及竞争条件导致的错误,实际上lock关键字是Monitor类用例的一个语法糖.如果我们分解使用了lock关键字的代码,将会看到它如下面代码片段所示: bool acquireLock = false; try { Monitor.Enter(lockObject, ref acquireLock); //Code that access resources that are protected by the lock. } finally { if (acquire…