Mutex имена - лучшая практика? - PullRequest
7 голосов
/ 21 января 2009

Относительно этого вопроса , как лучше всего называть мьютекс? Я понимаю, что это может варьироваться в зависимости от ОС и даже от версии (особенно для Windows), поэтому, пожалуйста, укажите платформу в ответе. Мой интерес к Win XP и Vista.

Ответы [ 5 ]

8 голосов
/ 21 января 2009

Действительно безопасное имя для глобального мьютекса - <a description> + <a GUID>:

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

Используя такое имя, абсолютно нет шансов, что кто-то другой будет использовать то же имя мьютекса, что и ваш мьютекс.

Обнюхивая с помощью проводника процессов, вы можете видеть, что GUID используются в нескольких местах, хотя в целом они не используются. Тем не менее, закономерность заключается в том, что слово «мьютекс» используется довольно часто, и Microsoft, похоже, нравится использовать капиталы.

4 голосов
/ 24 апреля 2012

Предложение:

Включите тип объекта (в данном случае Mutex) и пространство имен приложения в уникальное имя. Как правило, это будет безопасно. Если вы действительно хотите быть в безопасности, добавьте также Guid.

Пример:

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

Преимущества:

Создавая соглашение об именах для ваших приложений, вы облегчаете управление многими именами объектов, создаете более читаемый код и очень легко для существующих и будущих разработчиков понять код.

Совет:

Вместо использования Mutex Direct в вашем коде напишите многократно используемый класс-обертку, который может сделать код более понятным в случае, если вы захотите изменить реализацию или добавить настройку. Не забудьте удалить 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 голосов
/ 24 августа 2012

Поиск в Google образцов CreateMutex показывает, что «MyMutex» является наиболее распространенным выбранным именем мьютекса.

Поэтому вы должны назвать свой мьютекс "NotMyMutex", чтобы гарантировать уникальность.

2 голосов
/ 21 января 2009

Вы можете объединить описание того, от чего вы защищаетесь, со словом «Страж»

0 голосов
/ 23 апреля 2010

Я не использовал GUID в прошлом, но я начинаю думать, что это хорошая идея - если вы думаете обо всех разработчиках в мире, работающих над различным программным обеспечением.

Если вы не придумали совершенно непонятные имена, которые, как вы можете быть уверены, уникальны, вам следует подумать о GUID.

...