Ver Mensaje Individual
  #9 (permalink)  
Antiguo 01/12/2007, 11:54
Avatar de Eternal Idol
Eternal Idol
 
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: como se abre un fichero en modo lectura bloqueante??

Cita:
Iniciado por aeb_asturias Ver Mensaje
No puedo utilizar semaforos ni mutex porque date cuenta que estos procesos no comparten nada.....simplemente hay un programa que los va lanzando y ellos mismos son los que tienen que verificar que no hay uno previo ya ejecutandose para seguir hacia adelante.
Hasta ahi no habria ningun problema en hacerlo, si pueden comprobar un archivo, pueden comprobar otra cosa.

Cita:
Iniciado por aeb_asturias Ver Mensaje
Los mutex y semaforos están bien cuando el código es compartido y entonces es un medio bueno de sincronización. Pero en mi caso el programa que los lanza se encuentra en una máquina y los procesos son ejecutados en otra máquina diferente por lo que el programa que los lanza no sabe si hay algun recolector ya ejecutandose en la otra máquina. Él simplementa los lanza en determinados momentos y son los propios procesos los que tienen que verificar antes que nada que no existe ya uno anterior en ejecución para poder seguir hacia adelante.
¿Un solo programa (muchos procesos despues) es el que se ejecuta en esa maquina diferente? Si es asi no tiene importancia quien lo ejecuta y podes usar un mutex perfectamente. A menos claro que vos estes ejecutando un programa que no sea tuyo ... sino en tu programa comprobas al inicio y ya esta.

Aclaro que en Windows un mutex con nombre es global (o cuanto menos de la sesion), por lo tanto al inicio de tu programa intentas crearlo y si podes es que no hay ninguna instancia en ejecucion, sino podes (te devuelve ERROR_ALREADY_EXISTS) es que si la hay, cerras y listo.

Segun lo que puedo leer un semaforo es lo que necesitas en UNIX y podes usarlo con ftok, semget, etc.
Sino la manera mas simple que tienen es usar open con O_CREAT | O_EXCL. Es una operacion atomica y cuando falla quiere decir que ya hay un proceso en ejecucion, al terminar este proceso tiene que borrar el archivo.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO

Última edición por Eternal Idol; 01/12/2007 a las 12:17