我在项目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中启动方法?(我怎样才能避免死锁)
答案 0 :(得分:1)
Mutex
的工作方式是让两个程序请求相同对象的所有权,以便第一个获取它,第二个必须等到第一个释放它。该名称是系统用来确定他们是否是同一个"或者不这样做,因此使用不同的名称将允许同时访问这两个名称(因为每个人都要求拥有自己Mutex
的所有权,而没有其他人声称。)
关于第二个问题,无限循环并不完全是一个死锁,我认为它不仅仅是第一个进程中的错误而是其他任何错误。即使在一个简单的程序中,这样的事情也是错误的,程序会崩溃。超时可能会解决它,但如果存在共享资源,则可能会产生另一个问题(这是您首先使用互斥访问的原因)。我会首先采取预防措施来避免这些错误,或者如果它可以合法地发生,请尽早释放Mutex。