Creazione di un oggetto nella memoria condivisa all'interno di una Lib condivisa (quindi) in C ++

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

  •  07-07-2019
  •  | 
  •  

Domanda

È possibile condividere una singola istanza "god" tra tutti coloro che si collegano a questo codice, da collocare in un oggetto condiviso?

god* _god = NULL;
extern "C" 
{

int set_log_level(int level)
{
    if(_god == NULL) return -1;
    _stb->log_level(level);
    return 0;
}

int god_init(){
    if(_god == NULL){
        _god = new god(); //Magic happens here
    }
}

}

Purché esegua una sincronizzazione di blocco all'inizio di ogni funzione, e considerando che Dio stesso può fare nuove / malloc altre cose, ma quelle cose non verranno mai restituite al chiamante (Dio malloc solo per uso interno), cosa è il modo più semplice per farlo, se possibile.

Come può essere esteso a un numero arbitrario di programmi collegati a questa libreria condivisa?

È stato utile?

Soluzione

Boost Interprocess ha una libreria alta (er ) livello, oggetti di memoria condivisa portatili.

Altri suggerimenti

Questo non è affatto l'approccio corretto. Facendo ciò che suggerisci, la variabile sì, è globale per la libreria e quindi per il programma, ma i dati sono privati ??per il processo in esecuzione. Non sarai in grado di condividere i valori tra i programmi in esecuzione. @grieve si riferisce a un globale a cui accedono più thread, ma i thread condividono la stessa istanza del processo parent.

Attraverso i processi effettivi, è necessario passare a una funzione di memoria condivisa specifica del sistema operativo. Dai un'occhiata a Memoria condivisa per i dettagli. È un problema fattibile, ma non è particolarmente banale. Avrai anche bisogno di un sistema di sincronizzazione tra processi come Semaphores per coordinare l'utilizzo.

Sento che dio sarà un server di qualche tipo. Prendi in considerazione l'uso di una corretta architettura client / server, in modo da tenere Dio lontano dalle masse.

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