具有相同名称的互斥体
我对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?