Ver Mensaje Individual
  #6 (permalink)  
Antiguo 01/12/2007, 10:33
aeb_asturias
 
Fecha de Ingreso: marzo-2004
Mensajes: 550
Antigüedad: 20 años, 3 meses
Puntos: 7
Re: como se abre un fichero en modo lectura bloqueante??

Muchas gracias de nuevo por responder jeje.

El problema de utilizar esas llamadas bloqueantes es que si el proceso que la llama luego por lo que sea finaliza de forma incorrecta o lo "mata" alguién se supone que el fichero seguiría bloqueado indefinidamente no???

La verdad que la cosa es un poco complicada.

El motivo de porqué quiero realizar estos bloqueos es lo siguiente:

La idea es evitar que un programa implementado por mi en C++ se pueda estar ejecutando dos o mas veces simultaneamente. Solo debe ejecutarse uno en cada momento y una vez que termine ya se permite a otro proceso igual ser ejecutado. Como este proceso se lanza muchas veces en el tiempo, hay que evitar que si ya existe uno en ejecución este otro se llegue a lanzar.

Así que para controlar eso la idea era "jugar" con un fichero para sincronizar todos los procesos. En dicho fichero iba a estar almacenado el PID del proceso que en ese momento se estaría ejecutando.

Para ello, lo primero que haría este proceso es comprobar si existe dicho fichero. Si no es asi indicaría que no hay ningún otro proceso igual ejecutandose y por tanto crearía el fichero y añadiría en él su PID y comenzaría su trabajo.

Entonces, en caso de llegar otro proceso igual, primeramente comprobaría si existe dicho fichero. Si es así es posible que se esté ejecutando un proceso igual que se lanzó con anterioridad por lo que comprueba leyendo el PID almacenado en el fichero si ese proceso se esta ejecutando todavía. Si la respuesta es que SI pues entonces finaliza este segundo proceso. Si es que No, entonces seguramente debió de terminar de forma incorrecta el primer proceso o alguien lo debió "matar" y entonces este segundo proceso sustituirá el PID viejo del fichero por el propio suyo.


La cosa era utilizar un fichero para controlar que no se ejecuten a la vez mas de un proceso igual.

La pega está en que si dos procesos leen a la vez el PID que almacena el fichero y resulta que ese PID ya no existe (el proceso con ese PID finalizó ya) entonces los dos escribirán a la vez su PID y se ejecutarán. Y eso es lo que no quiero que ocurra.

Se trata de un problema de concurrencia un pelín complicado para mi.

No se me ocurre ninguna estrategia buena para solucionarlo.

No se que pensais vosotros....

Última edición por aeb_asturias; 01/12/2007 a las 10:39