Crear claves únicas para una cola de mensajes para una aplicación que puede tener varias instancias

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

  •  19-08-2019
  •  | 
  •  

Pregunta

He creado una aplicación CUI de Linux que se comunica entre procesos a través de Message-quene.

No hay ningún problema con él, siempre y cuando sea una sola instancia. Sin embargo, cuando hay varias instancias de la misma aplicación, los mensajes en la quene se envían a la instancia incorrecta.

Entiendo que esto se puede evitar dando a la función msgget una clave única. Usando ftok () para crear una clave, pero dado que las variables son las mismas, resultan en teclas idénticas.

¿Alguien puede guiarme sobre cómo tener una clave única para cada instancia?

La única idea que tengo ahora es randamizar la variable dada a ftok, y Sé que eso no puede ser correcto.

¿Fue útil?

Solución

¡Ten cuidado con ftok!

Esto solo será único para un sistema de archivos determinado y solo si entonces si el sistema de archivos no se usa mucho. fttok es conducido por el número de entrada de archivo en el sistema de archivos.

Esto solía ser una forma bastante buena de obtener valores únicos pero tiempo y la ley de Moores la alcanzó hace unos años. Funciona en el 8 bits inferiores del número de archivo pero el número de archivo real ahora es de 32 bits y la numeración comienza de nuevo para cada sistema de archivos.

La identificación del proceso es una muy buena elección, se reciclan pero no como siempre que el proceso siga vivo.

Otros consejos

Puede intentar usar la identificación del proceso. Mi google foo obtuvo esto

Buscando identificadores únicos a nivel mundial generalmente llamados Guid o Uuid. Debe haber una biblioteca que pueda usar para generarlos. Son cadenas únicas hechas de su dirección de nic, la hora actual y un número aleatorio.

¿Qué tal el reloj? WikiPedia dice que es mejor que RDTSC (y SMP seguro).

" En Linux, se proporciona una funcionalidad similar al leer el valor del reloj CLOCK_MONOTONIC utilizando la función POSIX clock_gettime. "

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top