与this question相关,命名互斥锁的最佳做法是什么?我意识到这可能会因操作系统甚至版本(尤其是Windows)而有所不同,所以请在回答时指定平台。我的兴趣在于Win XP和Vista。
答案 0 :(得分:8)
全局互斥锁的一个非常安全的名称是<a description> + <a GUID>
:
MyApp Single Instance Mutex : {c96f7db4-d743-4718-bef0-8533a198bcca}
通过使用这样的名称,其他人绝对不可能使用与互斥锁相同的互斥锁名称。
使用进程资源管理器嗅探,您可以看到GUID在少数地方使用,但通常不会使用它们。确实出现的一种模式是“mutex”这个词被大量使用,微软似乎喜欢使用capitols。
答案 1 :(得分:4)
<强>建议:强>
将对象类型(本例中为Mutex)和应用程序名称空间合并为唯一名称。这通常是安全的。如果你真的想要安全,那么也要附加一个Guid。
示例:强>
string mutexName = "MUTEX: Skyz.Messaging.ThreadPooling.MyAppSingleInstance";
优势:
通过为您的应用程序创建命名约定,您可以轻松管理许多对象名称,创建更易读的代码,并使现有和未来的开发人员更容易理解代码。
提示强>
不要在代码中直接使用Mutex,而是编写一个可重用的包装类,可以使代码更易于维护,以防您想要更改实现或添加调整。请记住使用一次性模式删除互斥锁,否则您将遇到问题!
using (SingletonProcess singletonProcess = new SingletonProcess("MUTEX: Skyz.Apps.MessagingQueue.InstanceMarker"))
{
if (singletonProcess.IsDuplicateInstance)
{
ConsoleWriter.WriteColorLine("An instance of the ExporterService exists, you cannot start a second instance.");
return
}
答案 2 :(得分:2)
您可以将您要保护的内容的说明与“警卫”一词结合起来
答案 3 :(得分:2)
谷歌搜索CreateMutex样本显示“MyMutex”是最常用的互斥名称。
因此,您应该将互斥锁命名为“NotMyMutex”以保证唯一性。
答案 4 :(得分:0)
我过去没有使用GUID,但我开始认为这是一个好主意 - 如果你想到世界上所有开发人员使用不同的软件。
除非你想到一些相当模糊的名字,你可以放心是独一无二的,你应该考虑一下GUID。