Création d'un objet dans la mémoire partagée à l'intérieur d'une librairie partagée (so) en C ++

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

  •  07-07-2019
  •  | 
  •  

Question

Est-il possible de partager une seule instance "dieu" parmi toutes les personnes qui sont liées à ce code, pour être placées dans un objet partagé?

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
    }
}

}

Dans la mesure où j'effectue une synchronisation des verrous au début de chaque fonction et considérant que Dieu lui-même peut créer d'autres choses / malloc, mais que ces choses ne seront jamais retournées à l'appelant (Dieu mallocs uniquement pour un usage interne), que est le moyen le plus simple de le faire, si possible.

Comment cela peut-il être étendu à un nombre arbitraire de programmes liés à cette bibliothèque partagée?

Était-ce utile?

La solution

Boost Interprocess : la bibliothèque a un niveau élevé ) niveau, objets de mémoire partagée portables.

Autres conseils

Ce n’est pas du tout la bonne approche. En faisant ce que vous suggérez, la variable, oui, est globale pour la bibliothèque, et donc pour le programme, mais les données sont privées pour le processus en cours d'exécution. Vous ne pourrez pas partager les valeurs entre les programmes en cours d'exécution. @grieve fait référence à un global accessible par plusieurs threads, mais les threads partagent la même instance de processus parent.

Parmi les processus réels, vous devez vous connecter à une installation de mémoire partagée spécifique à un système d'exploitation. Consultez la mémoire partagée pour plus de détails. C'est une question faisable, mais ce n'est pas particulièrement trivial à résoudre. Vous aurez également besoin d’un système de synchronisation interprocessus tel que Semaphores pour coordonner l’utilisation.

J'ai le sentiment que dieu sera un serveur quelconque. Pensez à utiliser une architecture client / serveur appropriée, de manière à éloigner Dieu des masses.

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