Criação de chaves únicas para uma fila de mensagens para um aplicativo que pode ter várias instâncias

StackOverflow https://stackoverflow.com/questions/653119

  •  19-08-2019
  •  | 
  •  

Pergunta

Eu fiz uma CUI aplicativo Linux que faz a comunicação entre processos via mensagem-quene.

Não há nenhum problema com ele, desde que ele é uma única instância. No entanto, quando existem várias instâncias do mesmo aplicativo, as mensagens na quene são enviados para a instância errada.

Eu entendo isso pode ser evitado, dando a função msgget uma chave única. Usando ftok () para criar uma chave, mas desde que as variáveis ??são os mesmos que resultem em chaves idênticas.

Alguém pode me orientar como ter uma chave única para cada instância?

A única ideia que eu tenho agora é randamize a variável dada a ftok, e Eu sei que não posso estar certo.

Foi útil?

Solução

Tenha cuidado com ftok!

Isso só vai ser exclusivo para um determinado sistema de arquivos e somente se, então, se o sistema de arquivos não é muito usado. fttok é impulsionado pelo número de entrada de arquivo no sistema de arquivos.

Isto costumava ser uma boa maneira de obter valores exclusivos, mas o tempo ea lei Moores apanhados com ele há alguns anos. Ele funciona na 8 bits inferiores do número de arquivos, mas o número real do arquivo é agora de 32 bits e numeração começa de novo para cada sistema de arquivos.

ID de processo é uma escolha muito boa, eles se re-ciclada mas não como desde que o processo ainda está vivo.

Outras dicas

Você pode tentar usar o ID do processo. Meu google foo tem este

Olhando ids exclusivos globalmente normalmente chamado Guid ou UUID. Deve haver uma biblioteca pode ser usada para gerá-los. Eles são cordas originais feitas a partir de seu endereço nic, o tempo atual, e um número aleatório.

Como sobre o relógio? WikiPedia exemplo é que é melhor do que RDTSC (e SMP seguro).

"Under Linux, funcionalidade semelhante é fornecido pela leitura do valor do relógio CLOCK_MONOTONIC usando a função POSIX clock_gettime."

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top