Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.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#_Mutex - Fatal编程技术网

C# 同名互斥体

C# 同名互斥体,c#,mutex,C#,Mutex,我对C#编程比较陌生,几天前,我遇到了术语mutex。它的使用是为了避免运行同一应用程序的多个实例。事实上,我正在读一本关于WPF的书(当然是使用C),因此对C没有深入的解释(作者是为对C有足够了解的人写的)。 它是以这种形式使用的: Mutex mutex; // ... // Check for existing instance string mutexName = "MyCompanyName.MyAppName"; bool createdNew; mutex = new Mutex

我对C#编程比较陌生,几天前,我遇到了术语
mutex
。它的使用是为了避免运行同一应用程序的多个实例。事实上,我正在读一本关于WPF的书(当然是使用C),因此对C没有深入的解释(作者是为对C有足够了解的人写的)。
它是以这种形式使用的:

Mutex mutex;
// ...

// Check for existing instance
string mutexName = "MyCompanyName.MyAppName";
bool createdNew;
mutex = new Mutex(true, mutexName, out createdNew);

// If there is an existing instance, shut down this one
if(!createdNew) { Shutdown(); }
我对互斥的解释是,它是一种系统范围的类型。所有单实例应用程序都会访问系统中的所有互斥体,以防止出现多个实例。也。互斥锁应具有唯一的
名称
。(当然,我会被纠正;这是我自己的解释,所以可能是错误的)


假设有一个名为
“mutexConflict”
的互斥体是由应用程序a创建的,而另一个应用程序B(由完全不同的作者创建)也有自己的互斥体,名为
“mutexConflict”
。如果A已经在运行,而B即将运行,难道不应该存在冲突吗?B会运行吗?

是的,应该有冲突。这就是为什么要为互斥对象选择可能是唯一的名称


如果一次只想运行应用程序的一个实例,那么只需在程序的开头打开一个命名的互斥体,如果它存在,则关闭它。这就是您的示例的要点,也是它通常的实现方式

如果出于这个原因,示例使用了“MyCompanyName.MyAppName”,因为您公司的另一个团队不太可能正在开发与您同名的应用程序

这正是互斥锁的关键所在。您有一些密钥,并且希望提供对该密钥的互斥使用。

这就是本书中的示例。虽然发生这种情况的可能性很小,但它是可能发生的。我暗示应用程序B可能是由另一位作者编写的,很可能我不知道。如果我同时编写这两个应用程序,并将它们命名为(?)类似的话,那我就太傻了。@afaolek:如果你想强制它们不同时运行,那是有道理的。@afaolek:而且,即使你不认识它们,你也可以编造一个没有人会想到的名字。例如:“服务员,要端正新闻记者的鼻子,否则友好的牛奶会把我的裤子弄脏。”