Los recursos compartidos de impulso :: entre procesos (memoria compartida, etc.) requieren que se proporcione la sincronización necesaria. La razón de esto es que no se requiere sincronización, y por lo general es una operación un tanto costosa en cuanto al rendimiento.
Digamos, por ejemplo, que tiene un proceso que escribió en la memoria compartida las estadísticas actuales de algo en formato entero de 32 bits, y algunos procesos que leen esos valores. Dado que los valores son enteros (y, por lo tanto, en su plataforma las lecturas y escrituras son atómicas) y tiene un solo proceso que las escribe y algunos procesos las leen, no se necesita sincronización para este diseño.
Sin embargo, en algunos ejemplos necesitará la sincronización, como si el ejemplo anterior tuviera varios escritores, o si en lugar de números enteros estuviese utilizando datos de cadena. Hay varios mecanismos de sincronización en el interior de impulso (así como los no-boost, pero desde el que ya utilizan impulso), describen a continuación:
[Refuerzo información para la versión estable: 1,48] http://www.boost.org/doc/libs/1_48_0/doc/html/interprocess/synchronization_mechanisms.html
[Boost información para la versión de su usando: 1.40] http://www.boost.org/doc/libs/1_40_0/doc/html/interprocess/synchronization_mechanisms.html
con memoria compartida es una práctica común colocar el mecanismo de sincronización en la base del segmento de memoria compartida, donde puede ser anónima (es decir, el núcleo del sistema operativo no proporciona acceso a por su nombre). De esta manera, todos los procesos saben cómo bloquear el segmento de memoria compartida, y puede asociar bloqueos con sus segmentos (si tiene varios, por ejemplo)
Recuerde que un mutex requiere el mismo hilo de ejecución (dentro de un proceso) para desbloquearlo que lo bloqueó. Si necesita bloquear y desbloquear un objeto de sincronización desde diferentes subprocesos de ejecución, necesita un semáforo.
Asegúrese de que si elige utilizar un mutex que es un muxto entre procesos (http://www.boost.org/doc/libs/1_48_0/doc/html/boost/interprocess/interprocess_mutex.html) a diferencia del mutex en la biblioteca de subprocesos de subprocesos que es para un solo proceso con múltiples subprocesos.
¿Has leído http://www.boost.org/doc/libs/1_40_0/doc/html/interprocess/synchronization_mechanisms.html? –