标签:
public void some_method() { int a=100; int b=0; Monitor.Enter(this); //say we do something here. int c=a/b; Monitor.Exit(this); }
上面的代码运行会产生问题。当代码运行到int c=a/b; 的时候,会抛出一个异常,Monitor.Exit将不会返回。因此这段程序将挂起,其他的线程也将得不到锁。有两种方法可以解决上面的问题。第一个方法是:将代码放入try…finally内,在finally调用Monitor.Exit,这样的话最后一定会释放锁。第二种方法是:利用C#的lock()方法。调用这个方法和调用Monitoy.Enter的作用效果是一样的。但是这种方法一旦代码执行超出范围,释放锁将不会自动的发生。见下面的代码:
public void some_method() { int a=100; int b=0; lock(this); //say we do something here. int c=a/b; }
public void some_method() { int a=100; int b=20; Mutex firstMutex = new Mutex(false); FirstMutex.WaitOne(); //some kind of processing can be done here. Int x=a/b; FirstMutex.Close(); }
标签:
原文地址:http://www.cnblogs.com/jghaha/p/4421741.html