Создание уникальных ключей для квена сообщений для приложения, которое может иметь несколько экземпляров - PullRequest
2 голосов
/ 17 марта 2009

Я создал приложение Linux CUI, которое обменивается данными между процессами через Message-quene.

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

Я понимаю, что этого можно избежать, предоставив функции msgget уникальный ключ. Использование ftok () для создания ключа, но поскольку переменные одинаковы, они приводят к идентичные ключи.

Может ли кто-нибудь подсказать мне, как создать уникальный ключ для каждого экземпляра?

Единственная идея, которую я имею сейчас, - это рандомизировать переменную, переданную ftok, и Я знаю, что это не так.

Ответы [ 4 ]

2 голосов
/ 17 марта 2009

Будьте осторожны с фток!

Это будет уникально только для данной файловой системы и только если тогда, если файловая система не используется интенсивно. fttok управляется номером записи в файловой системе.

Раньше это был довольно хороший способ получить уникальные значения, но время и закон Мурса догнал его несколько лет назад. Это работает на младшие 8 бит номера файла, но фактический номер файла теперь 32 бита и нумерация начинается заново для каждой файловой системы.

Идентификатор процесса - довольно хороший выбор, они действительно повторяются, но не как пока процесс еще жив.

2 голосов
/ 17 марта 2009

Вы можете попробовать использовать идентификатор процесса. Мой Google Foo получил это

0 голосов
/ 02 июля 2009

Как насчет часов? WikiPedia говорят, что это лучше, чем RDTSC (и безопасный SMP).

"В Linux аналогичная функциональность обеспечивается чтением значения CLOCK_MONOTONIC clock с помощью функции POSIX clock_gettime."

0 голосов
/ 17 марта 2009

Поиск глобально уникальных идентификаторов, обычно называемых Guid или Uuid. Должна быть библиотека, которую вы можете использовать для их генерации. Это уникальные строки из вашего ник-адреса, текущего времени и случайного числа.

...