Création de clés uniques pour une file de messages pour une application pouvant comporter plusieurs instances

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

  •  19-08-2019
  •  | 
  •  

Question

J'ai créé une application CUI Linux qui communique entre processus via Message-quene.

Cela ne pose pas de problème tant qu’il s’agit d’une instance unique. Cependant, lorsqu'il existe plusieurs instances de la même application, les messages de la quene sont envoyés à la mauvaise instance.

Je comprends que cela peut être évité en donnant à la fonction msgget une clé unique. Utiliser ftok () pour créer une clé, mais comme les variables sont les mêmes, il en résulte clés identiques.

Quelqu'un peut-il me guider pour avoir une clé unique pour chaque instance?

La seule idée que j’ai maintenant est de randamiser la variable donnée à ftok, et Je sais que ça ne peut pas être vrai.

Était-ce utile?

La solution

Faites attention avec ftok!

Cela ne sera unique que pour un système de fichiers donné et seulement si le système de fichiers n'est pas très utilisé. fttok est déterminé par le numéro d’entrée de fichier dans le système de fichiers.

C’était un bon moyen d’obtenir des valeurs uniques, mais le temps et la loi Moores l’a rattrapée il ya quelques années. Cela fonctionne sur le 8 bits inférieurs du numéro de fichier mais le numéro de fichier actuel est maintenant 32 bits et la numérotation recommence pour chaque système de fichiers.

Le processus id est un très bon choix, ils sont recyclés mais pas comme tant que le processus est toujours en cours.

Autres conseils

Vous pouvez essayer d’utiliser l’identifiant du processus. Mon google foo a eu cette

.

Rechercher des identifiants uniques au monde généralement appelés Guid ou Uuid. Il doit y avoir une bibliothèque que vous pouvez utiliser pour les générer. Ce sont des chaînes uniques créées à partir de votre adresse nic, de l'heure actuelle et d'un nombre aléatoire.

Qu'en est-il de l'horloge? WikiPedia dit que c'est mieux que RDTSC (et SMP Safe).

"Sous Linux, une fonctionnalité similaire est fournie en lisant la valeur de l'horloge CLOCK_MONOTONIC à l'aide de la fonction POSIX clock_gettime."

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top