Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
互斥c#。系统如何识别互斥代码_C#_.net_Mutex - Fatal编程技术网

互斥c#。系统如何识别互斥代码

互斥c#。系统如何识别互斥代码,c#,.net,mutex,C#,.net,Mutex,我在项目a中有方法a() Mutex mutex = new Mutex(fale,"MT"); mutex.WaitOne(); //SOME LENGTHY CODE mutex.ReleaseMutex(); 和项目b中的方法b() 我需要使这两种方法相互排斥 目前我的代码如下 在项目A中 Mutex mutex = new Mutex(fale,"MT"); mutex.WaitOne(); //SOME LENGTHY CODE mutex.ReleaseMutex();

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

Mutex mutex = new Mutex(fale,"MT");
 mutex.WaitOne();
 //SOME LENGTHY CODE
 mutex.ReleaseMutex();
和项目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();
我可以看出,这两个函数的工作原理是互斥的

现在我有两个问题

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

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

Two:假设项目A上的代码进入无限循环
如何启动B中的方法?(如何避免死锁)

互斥锁的工作方式是让两个进程请求对同一对象的所有权,这样第一个进程获得它,第二个进程必须等到第一个进程释放它。名称是系统用来确定它们是否“相同”的名称,因此使用不同的名称将允许同时访问这两个名称(因为每一个名称都请求拥有自己的
互斥体
,没有其他人声称这一点)


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

1。二号。那是一头假鲸。当然,你不能指望不合理的代码会带来合理的行为。您可以检测到它,WaitOne()有一个需要超时的重载。建议您在互斥体名称中显式添加前缀“Global\”或“Local\”,以明确互斥体是否有。