具有相同名称的互斥锁

时间:2011-06-24 17:00:52

标签: c# 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(); }

我对互斥体的解释是它是一种系统范围的类型。所有单实例应用程序都访问系统中的所有互斥锁以防止多个实例。也。互斥锁应该具有唯一的name。 (当然,我有待纠正;这是我自己的解释所以这可能是错误的。)

假设有一个由应用程序A创建的名为"mutexConflict"的互斥锁,而另一个应用程序B(由完全不同的作者创建)具有自己的互斥锁,也称为"mutexConflict"。如果A已经在运行并且B即将运行,那么是不是应该存在冲突? B会跑?

3 个答案:

答案 0 :(得分:1)

是的, 应该是冲突。这就是为什么你为你的互斥体选择可能是唯一的名称的原因。

如果您希望一次只运行一个应用程序实例,则只需在程序开头打开一个已命名的互斥锁,如果存在,则关闭。这就是你的例子,这就是它通常的实现方式。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

这完全是互斥的重点。您有一些密钥,并且您希望提供该密钥的互斥使用。