2012-07-13 8 views
7

Dos procesos de Linux abren y mmap el mismo/dev/shm/archivo de memoria compartida y lo utilizan como memoria común. Pregunta: ¿Cuál es la forma más simple y mejor para que un proceso "despierte" el otro proceso para notificar que debería verse en la memoria? Por ejemplo, ¿puede un proceso causar un evento poll() para el descriptor de archivo del otro proceso? La solución no necesita ser portátil, pero me gustaría que fuera simple.Causa de un evento de encuesta de Linux en un archivo de memoria compartida

Respuesta

2

Es por eso que POSIX tiene variables de condición.

Defina una variable de condición POSIX compartida y su mutex asociada en la región de memoria compartida.

Luego, espere un hilo en la variable de condición y el otro señale el evento variable de condición cuando quiere que el otro hilo se vea en la memoria.

Hay un montón de material en la web en las variables de condición. Aquí hay uno corto bastante bueno: https://computing.llnl.gov/tutorials/pthreads/#ConditionVariables

0

También puede considerar el uso de un semáforo (POSIX nombrado semáforo) también para resolver esto.

Un ejemplo simple, se utiliza la memoria compartida (En el ejemplo que se encuentra en System V, pero se puede utilizar con POSIX también) y POSIX semáforo está en el enlace, How can 2 processes talk to each other without pipe()?

Cuestiones relacionadas