关于 Mutex 与 Lock 无聊的测试

一个朋友反映说,

使用 Mutex 时出现 “由于出现被放弃的mutex等待过程结束” 的问题。

后来经过模拟及查MSDN ,发现 如果 在 线程中使用 mutex

使用类似于

   void process()

  {

mutex.WaitOne();

   这里做某些操作, 然后出现异常了

   throw new Exception("");

 

 mutex .ReleaseMutex();

 

   }

出现上面的代码就有问题了。

改为 try{ .....  } finally { mutex .ReleaseMutex(); } 就好了。

 

接下来,朋友提出了使用 lock(obj) 的方法,这个方法没有问题,也可以解决同步的问题。

 

再后来, 这两种方式哪个更高呢,我就此问题做了一个测试,

测试结果表明   mutex 与 lock 两种方案在性能上无太大差别。

 

得出以下结论

两者性能方面无太大差异,

Lock 用于 代码块更好。
Mutex 可控性更好一些。

Lock 中出现异常会自动  unlock
但 Mutex不会自动的。

示例代码

 

 

 

 

 

posted @ 2012-04-13 10:27  张保维  阅读(461)  评论(0编辑  收藏  举报