Mutex c#.how系统识别互斥代码

时间:2014-10-19 15:13:41

标签: c# .net mutex

我在项目A中有方法a()

项目B中的

和方法b()

我需要让两种方法互相排斥

目前我的代码我跟着

项目A中的

Mutex mutex = new Mutex(fale,"MT");
 mutex.WaitOne();
 //SOME LENGTHY CODE
 mutex.ReleaseMutex();
项目B中的

我有

Mutex mutex = new Mutex(fale,"MT");
mutex.WaitOne();
//some different lengthy code
mutex.ReleaseMutex();

我可以看到他的两个功能都按预期互相排斥。

现在我有两个问题

一个:我在两种方法中使用名称“MT”。 这就是为什么这两个代码互相排斥的原因。

即使我使用不同的名字,这两个代码是否有任何不同的相互排斥方式?

两个:假设项目A上的代码进入无限循环 如何在B中启动方法?(我怎样才能避免死锁)

1 个答案:

答案 0 :(得分:1)

Mutex的工作方式是让两个程序请求相同对象的所有权,以便第一个获取它,第二个必须等到第一个释放它。该名称是系统用来确定他们是否是同一个"或者不这样做,因此使用不同的名称将允许同时访问这两个名称(因为每个人都要求拥有自己Mutex的所有权,而没有其他人声称。)

关于第二个问题,无限循环并不完全是一个死锁,我认为它不仅仅是第一个进程中的错误而是其他任何错误。即使在一个简单的程序中,这样的事情也是错误的,程序会崩溃。超时可能会解决它,但如果存在共享资源,则可能会产生另一个问题(这是您首先使用互斥访问的原因)。我会首先采取预防措施来避免这些错误,或者如果它可以合法地发生,请尽早释放Mutex。