C# 同名互斥体
我对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
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:而且,即使你不认识它们,你也可以编造一个没有人会想到的名字。例如:“服务员,要端正新闻记者的鼻子,否则友好的牛奶会把我的裤子弄脏。”