Tengo que crear una biblioteca compartida para tener acceso a un PP en la memoria. El PP no es enorme, pero lo suficientemente grande como para que sea difícil de llevar en cada proceso utilizando la biblioteca compartida. Afortunadamente, es bastante información estática, así que no necesita preocuparse mucho acerca de la sincronización de datos entre instancias de la biblioteca compartida. Sin embargo, lo que hago tiene que preocuparse de la memoria es la inicialización de una vez y nunca más.
Me encantaría todas las bibliotecas compartidas para tener una biblioteca de alcance variable, pero no creo que sea posible. Si es así, hágamelo saber ... pero sé que normalmente cada proceso obtiene su propia copia de la biblioteca compartida de datos del segmento. No creo que hay una manera de marcar una parte de ese segmento de datos compartidos a través de todas las instancias de la biblioteca.
Por lo tanto, creo que tendrás que tener acceso a la biblioteca PP en la memoria compartida. Sin embargo, el primer ejemplo de la biblioteca se pondrá en marcha a las necesidades para crear la memoria compartida, que se le atribuyen, y cargar todo antes de cualquier otro posible casos puede utilizarlo. ¿Cómo puedo garantizar que este crear / inicializar una vez que ocurre antes de la memoria compartida se utiliza?
Al principio, pensé que el no-existencia del segmento de memoria compartida que hacerlo ... pero existe una condición de carrera entre crear e inicializar cuando-en otro ejemplo de la biblioteca que ver la memoria compartida, pero no podrá acceder a él porque aún no se ha inited. Sé que puede almacenar
posix mutex en memoria compartida ... así que supongo que puede usar uno de ellos. Sin embargo, el otro problema se da cuando el segmento de memoria compartida es "más de izquierda" de las anteriores carreras.
¿Qué sucede entonces? Así que ... todos de la biblioteca "separar" del segmento, pero ninguno de ellos destruyen. ¿Y ahora qué ... la próxima vez que se inicia la biblioteca fresca debe re-inicio de la memoria compartida, pero no.
Hummm ... alguna idea? Algunos de dirección? ¿Cuál es el método común de proporcionar a la memoria compartida sincronización? ¿Debería usar un sistema de semáforo? ¿No sufren de la misma "caliente" inicio problema (separada de los procesos de la biblioteca, pero la memoria compartida / semáforos todavía residentes).
Esto será escrito para AIX 5, BTW, para los interesados.