Erstellen von eindeutigen Schlüssel für eine Nachrichten-Warteschlange für eine App, die mehrere Instanzen haben kann

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

  •  19-08-2019
  •  | 
  •  

Frage

Ich habe eine Linux CUI app gemacht, die zwischen Prozessen über die Nachrichten-quene in Verbindung steht.

Es gibt kein Problem mit ihm, solange es sich um eine einzelne Instanz ist. Allerdings, wenn es mehrere Instanzen des gleichen App sind, die Nachrichten in der quene an die falschen Instanz gesendete.

Ich verstehe dies, indem sie die msgget Funktion einen eindeutigen Schlüssel vermieden werden können. Mit ftok () einen Schlüssel zu erstellen, aber da die Variablen gleich sind sie führen identische Schlüssel.

Kann jemand mich leiten, wie für jede Instanz einen eindeutigen Schlüssel haben?

Die einzige Idee, die ich jetzt habe, ist die Variable randamize, ftok gegeben und Ich weiß, dass kann nicht richtig sein.

War es hilfreich?

Lösung

Seien Sie vorsichtig mit ftok!

Dies wird nur für ein bestimmtes Dateisystem eindeutig sein und nur dann, wenn dann, wenn das Dateisystem nicht stark genutzt. fttok wird durch die Datei-Eintragsnummer im Dateisystem angetrieben wird.

Dies war früher ein ziemlich guter Weg, um eindeutige Werte sein, aber die Zeit und fing Moores Gesetz vor ein paar Jahren mit ihm auf. Es funktioniert auf die untere 8 Bits der Dateinummer, aber die tatsächlichen Dateinummer ist jetzt 32 Bit und Nummerierung beginnt wieder für jedes Dateisystem.

Prozess-ID ist eine ziemlich gute Wahl, sie tun vollen recycliertem bekommen, aber nicht so solange der Prozess noch am Leben ist.

Andere Tipps

Sie könnten versuchen, den Prozess-ID verwenden. Mein google foo bekam diese

Suche global eindeutige IDs in der Regel Guid oder Uuid genannt. Es muss eine Bibliothek, die Sie ihnen zu erzeugen, verwenden können. Sie sind einzigartig Saiten von Ihrer nic-Adresse, die aktuelle Zeit und eine Zufallszahl.

Wie wäre es um die Uhr? WikiPedia sagt es sich als RDTSC besser ist (und SMP sicher).

„Unter Linux, eine ähnliche Funktionalität durch das Lesen der Wert von CLOCK_MONOTONIC Uhr vorgesehen ist POSIX clock_gettime Funktion.“

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top