Mutex名称 - 最佳实践?

时间:2009-01-21 06:33:47

标签: mutex naming

this question相关,命名互斥锁的最佳做法是什么?我意识到这可能会因操作系统甚至版本(尤其是Windows)而有所不同,所以请在回答时指定平台。我的兴趣在于Win XP和Vista。

5 个答案:

答案 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。