一个朋友反映说,
使用 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不会自动的。