代码之家  ›  专栏  ›  技术社区  ›  Argalatyr Rodrigo

互斥体名称-最佳实践?

  •  10
  • Argalatyr Rodrigo  · 技术社区  · 17 年前

    关联到 this question ,命名互斥体的最佳实践是什么?我意识到这可能会因操作系统甚至版本(尤其是Windows)而异,所以请在回答时指定平台。我对Win XP和Vista感兴趣。

    5 回复  |  直到 8 年前
        1
  •  10
  •   spongebob    10 年前

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

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

    使用这样的名称,其他人绝对不会使用与您的互斥体相同的互斥体名称。

    使用进程浏览器四处嗅探,您可以看到GUID在一些地方被使用,尽管一般来说它们没有被使用。不过,确实出现了一种模式,即“互斥”一词被使用得很多,微软似乎喜欢使用capitals。

        2
  •  5
  •   Raiford    14 年前

    建议:

    将对象类型(在本例中为Mutex)和应用程序命名空间合并到唯一名称中。这通常是安全的。如果你想真正安全,那么也可以附加一个Guid。

    例子:

        string mutexName = "MUTEX: Skyz.Messaging.ThreadPooling.MyAppSingleInstance";
    

    优势:

    通过为您的应用程序创建命名约定,您可以轻松管理许多对象名称,创建更易读的代码,并使现有和未来的开发人员更容易理解代码。

    提示:

    不要在代码中使用Mutex Directly,而是编写一个可重用的包装器类,以便在您想要更改实现或添加调整时使代码更易于维护。记得使用一次性模式删除静音,否则会出现问题!

    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  
    
    
                }
    
        3
  •  4
  •   Chris Becke    13 年前

    在谷歌上搜索CreateMutex示例后发现,“MyMutex”是最常见的互斥体名称。

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

        4
  •  2
  •   Stephen Denne    17 年前

    你可以将你所保护的东西的描述与“警卫”一词结合起来

        5
  •  0
  •   Span    16 年前

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

    除非你想的是非常模糊的名字,你可以确信它们是唯一的,否则你应该考虑GUID。