Semáforo de memoria compartida
-
05-07-2019 - |
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
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.
Podrías usar mutexes PTHREAD. Mientras inicia una exclusión mutua, debe usar pthread_mutexattr_setpshared para que funcione correctamente. Se comparte entre procesos y luego se coloca dentro de una memoria compartida. Todos los procesos se pueden adjuntar a la memoria compartida y luego acceder al mutex.
También puede agregar atributos adicionales al SHM según su requisito de bloqueo (recursivo, etc.,)
¿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.