Pregunta

Tengo 10 procesos en ejecución, cada uno escribiendo en el mismo archivo. No quiero múltiples escritores, así que básicamente estoy buscando un semáforo mutex / binario para proteger las escrituras de archivos. El problema es que no puedo compartir el semáforo entre 10 procesos, por lo que estoy considerando usar la memoria compartida entre 10 procesos y colocar el semáforo dentro de la memoria compartida para que cada proceso pueda acceder a él.

¿Alguien puede indicarme la documentación sobre esto en C / C ++ para Unix? El código de muestra para usar esta estructura sería genial.

Gracias

¿Fue útil?

Solución

Parece que sería mejor usar flock (2) :

flock(fd, LOCK_EX);
n = write(fd, buf, count);
flock(fd, LOCK_UN);

Otros consejos

Poner un semáforo en la memoria compartida no es la mejor solución para este problema (si es que funcionaría). Debe investigar el bloqueo de archivos, que es una característica de UNIX diseñada específicamente para proporcionar exclusividad entre los escritores de archivos.

Específicamente, echa un vistazo:

Para obtener más material explicativo, consulte Programación avanzada en el entorno UNIX, sección 14.3

Eche un vistazo a Volumen de programación de red UNIX. 2 por W. Richard Stevens.

Es el mejor libro que se haya escrito sobre este tema.

¿Qué hay de usar UNIX IPC para crear una cola compartida? Un proceso lee la cola y escribe en el archivo, todos los demás procesos empujan los datos a la cola.

scroll top