2009-03-17 3 views
2

J'ai créé une application Linux CUI qui communique entre les processus via Message-quene.Création de clés uniques pour un message quene pour une application pouvant avoir plusieurs instances

Il n'y a pas de problème tant qu'il s'agit d'une instance unique. Cependant, lorsqu'il y a plusieurs instances de la même application, les messages du fichier sont envoyés à la mauvaise instance.

Je comprends que cela peut être évité en donnant à la fonction msgget une clé unique. En utilisant ftok() pour créer une clé, mais puisque les variables sont les mêmes, elles donnent 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 randamize la variable donnée à ftok, et je sais que ne peux pas avoir raison.

Répondre

2

Faites attention avec ftok!

Ceci sera seulement unique pour un système de fichiers donné et seulement si le système de fichiers n'est pas fortement utilisé. fttok est piloté par le numéro d'entrée du fichier dans le système de fichiers.

Cela a été un très bon moyen d'obtenir des valeurs uniques, mais le temps et Moores loi rattrapé il ya quelques années. Il fonctionne sur les inférieurs 8 bits du numéro de fichier mais le numéro de fichier réel est maintenant 32 bits et la numérotation recommence pour chaque système de fichiers.

L'ID de processus est un très bon choix, mais il est ré-cyclé, mais pas comme tant que le processus est toujours actif.

+0

merci pour le conseil! gardera à l'esprit chaque fois que j'utilise ftok – Saifis

2

Vous pouvez essayer d'utiliser l'ID de processus. Mon google foo a this

0

Vous recherchez des id uniques globalement 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 faites à partir de votre adresse, l'heure actuelle, et un nombre aléatoire.

0

Que diriez-vous de l'horloge? WikiPedia disons que c'est mieux que RDTSC (et SMP sécurisé).

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

Questions connexes