Creazione di chiavi univoche per una coda di messaggi per un'app che può avere più istanze

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

  •  19-08-2019
  •  | 
  •  

Domanda

Ho creato un'app CUI Linux che comunica tra i processi tramite Message-quene.

Non ci sono problemi se si tratta di una singola istanza. Tuttavia, quando ci sono più istanze della stessa app, i messaggi nella quene vengono inviati all'istanza sbagliata.

Capisco che questo può essere evitato dando alla funzione msgget un tasto univoco. Usando ftok () per creare una chiave, ma poiché le variabili sono uguali si traducono in chiavi identiche.

Qualcuno può guidarmi come avere una chiave univoca per ogni istanza?

L'unica idea che ho ora è di randamizzare la variabile data a ftok e So che non può avere ragione.

È stato utile?

Soluzione

Stai attento con ftok!

Questo sarà unico per un determinato file system e solo se allora se il file system non è molto utilizzato. fttok è guidato dal numero di voce del file nel file system.

Questo era un buon modo per ottenere valori unici ma tempo e la legge di Moores l'ha raggiunta qualche anno fa. Funziona sul 8 bit inferiori del numero di file, ma il numero di file effettivo ora è di 32 bit e la numerazione ricomincia per ogni file system.

L'ID di processo è una buona scelta, viene riciclato ma non come purché il processo sia ancora attivo.

Altri suggerimenti

Potresti provare a usare l'id processo. Il mio google foo ha questo

Ricerca di ID univoci a livello globale di solito chiamati Guid o Uuid. Ci deve essere una libreria che è possibile utilizzare per generarli. Sono stringhe uniche create dal tuo indirizzo nic, l'ora corrente e un numero casuale.

E l'orologio? WikiPedia dicono che è meglio di RDTSC (e sicuro per SMP).

" Sotto Linux, funzionalità simili sono fornite leggendo il valore di CLOCK_MONOTONIC clock usando la funzione POSIX clock_gettime. "

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top