具有相同名称的互斥体

我对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会跑吗?


是的,应该一个冲突。 这就是为什么选择这种名称为你的互斥体(mutices?:))),可能是唯一的。

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


如果出于这个原因,该示例使用“MyCompanyName.MyAppName”,因为公司中的其他团队不太可能开发与您具有相同名称的应用程序


这完全是互斥体的一点。 你有一些密钥,并且你想提供该密钥的互斥使用。

链接地址: http://www.djcxy.com/p/51217.html

上一篇: Mutexes with the same name

下一篇: Win32: How to get the process/thread that owns a mutex?