9

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

4

5 回答 5

9

全局互斥锁的一个真正安全的名称是<a description> + <a GUID>

MyApp Single Instance Mutex : {c96f7db4-d743-4718-bef0-8533a198bcca}

通过使用这样的名称,其他人绝对不可能使用与您的互斥锁相同的互斥锁名称。

使用进程资源管理器四处探查,您可以看到 GUID 在一些地方使用,但一般情况下它们不使用。不过,确实出现的一种模式是“互斥锁”这个词被大量使用,而微软似乎喜欢使用首都。

于 2009-01-21T07:11:15.083 回答
5

建议:

将对象类型(在本例中为 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  


            }
于 2012-04-23T21:38:26.437 回答
4

谷歌搜索 CreateMutex 样本显示“MyMutex”是最常用的互斥锁名称。

因此,您应该将互斥锁命名为“NotMyMutex”以保证唯一性。

于 2012-08-24T06:42:36.053 回答
2

您可以将您要保护的内容的描述与“Guard”一词结合起来

于 2009-01-21T06:37:27.443 回答
0

我过去没有使用过 GUID,但我开始认为这是个好主意——如果你想想世界上所有开发人员都在使用不同的软件。

除非您想出可以确定是唯一的非常晦涩的名称,否则您应该考虑 GUID。

于 2010-04-23T04:57:32.277 回答