Linux - Semáforos y memoria compartida

 
Vista:

Semáforos y memoria compartida

Publicado por roleiland (2 intervenciones) el 09/07/2012 05:07:35
Hola, estoy trabajando con memoria compartida. Tengo un proceso, que crea y escribe en un segmento. Luego quiero que los otros procesos, puedan acceder a esa memoria siempre y cuando el principal no este escribiendo. Por eso necesito usar semáforos para sincronizar, pero tengo problemas. ¿Cómo hago para que el proceso que escribe bloquee a los otros procesos para que no puedan leer mientras se escribe?

Sería algo así:

Operacion.sem_num = 0;
Operacion.sem_op = -1;
Operacion.sem_flg = 0;

semop (Id_Semaforo, &Operacion, 1); // Cerrar semáforo

// Proceso que escribe

Operacion.sem_num = 0;
Operacion.sem_op = 1;
Operacion.sem_flg = 0;

semop (Id_Semaforo, &Operacion, 1); // Abrir semáforo


Luego en los otros procesos sería:

Comprobar semáforo (sin alterar el estado) <- no sé cómo se hace.
Leer datos

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Semáforos y memoria compartida

Publicado por Tom (482 intervenciones) el 09/07/2012 09:40:40
En principio, un proceso no necesita comprobar el estado del semáforo; lo mas normal es que simplemente espere a que se abra (con sem_wait()).

En el man de sem_wait tienes bastante info.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar