Crear un objeto en la memoria compartida dentro de una biblioteca compartida (so) en C ++

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

  •  07-07-2019
  •  | 
  •  

Pregunta

¿Es posible compartir una única instancia de 'dios' entre todos los que se vinculan a este código, para colocarla en un objeto compartido?

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

}

Siempre que realice una sincronización de bloqueo al comienzo de cada función, y teniendo en cuenta que Dios mismo puede hacer nuevas / malloc otras cosas, pero esas cosas nunca serán devueltas a la persona que llama (Dios mallocs solo para uso interno), qué es la forma más sencilla de hacerlo, si es posible.

¿Cómo se puede extender a un número arbitrario de programas vinculados a esta biblioteca compartida?

¿Fue útil?

Solución

La biblioteca Boost Interprocess tiene un alto (er ) nivel, objetos portátiles de memoria compartida.

Otros consejos

Este no es el enfoque correcto en absoluto. Al hacer lo que sugiere, la variable, sí, es global para la biblioteca y, por lo tanto, para el programa, pero los datos son privados para el proceso de ejecución real. No podrá compartir los valores entre los programas en ejecución. @grieve se refiere a un acceso global por múltiples hilos, pero los hilos comparten la misma instancia de proceso padre.

En todos los procesos reales, debe acceder a una instalación de memoria compartida específica del sistema operativo. Consulte Memoria compartida para obtener más información. Es un problema factible, pero no es particularmente trivial lograrlo. También necesitará un sistema de sincronización entre procesos como semáforos para coordinar el uso.

Tengo la sensación de que dios será un servidor de algún tipo. Considere usar una arquitectura adecuada de cliente / servidor, para mantener a Dios alejado de las masas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top