Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/08/2009, 15:08
samy4ever
 
Fecha de Ingreso: agosto-2008
Mensajes: 143
Antigüedad: 16 años, 3 meses
Puntos: 1
Problema planteamiento concurrencia

Hola!

AVISO, MUCHO TEXTO PERO PREGUNTAS CONCRETAS Y FÁCILES! Sólo hay texto para plantear la situación correctamente(me voy de vacaciones y así al volver puedo leer vuestras opiniones).

No sé como plantear una concurrencia, a ver si me podeis orientar.

Situación:

Tengo 10 periféricos (A, B, C, D...), todos iguales que hacen lo mismo.

Tengo 3 scripts (en CSH). El primero usa 3 periféricos, el segundo usa 2 periféricos y el último 5.

Ahora mismo, uso un sólo periférico y lanzo el script 1, luego el 2 y el 3 con él. Los 3 scripts usan el mismo y tengo que esperar a que el 1 terimne para ejecutar el 2, y a que éste termine para ejecutar el 3. En este orden, porque los datos que genera el 1 sirven para el script 2 y a la vez para el 3.

La idea es que el script 1 se ejecute con el periférico A. En 10-15 segundos, se vuelva a ejecutar ese script pero con el periférico B. Que cuando termine la primera instancia con el periférico A, se vuelva a lanzar. Es decir, que se lancen los scripts sin parar usando el periférico A o B (el que esté libre).

¿Cómo hago eso? ¿Cómo controlo cuando uno de los scripts ha terminado para volver a lanzarlo?

Se podría hacer un código C o un script en Shell que lanzara el script, se quedara con el PID del proceso, y al terminarse comprobara qué periférico está libre del A o B, y se volviera a lanzar? Me suena haber estudiado algo de esto del estilo mutex o semáforos y demás pero ahora a la práctica no sé como enfocarlo.

En qué lenguaje lo hago? Mi idea es correcta hasta aquí? Me podeis dar una mano con por donde debería empezar?

Luego la otra parte es:
Cuando se termina el script 1, me gustaría lanzar el 2 con el periférico C, D o E. Y siempre así, es decir, cada vez que el script 1 termina --> Se ejecute el 2 con uno de los periféricos asignados. Eso sería en el mismo código que el control de antes? Es decir, cuando termina el script 1, en vez de volver a lanzarlo, primero lanzo el 2 y después el 1, cierto? Y para ejecutar el 3, más de lo mismo: espero que el 2 termine y entonces mando a ejecutar el 3 (y mientras ya se estaba ejecutando el 1).

Hace mucho que no hago threads o mutex o semáforos... Necesito un poco de guía, puedo hacer lo que quiero con los 3 scripts y periféricos?

Otra idea cutre que se me ha ocurrido pero no sé si funciona es hacer un crontab para que se ejecute el script 1, al terminar tire el 2 y que este al terminar lance el 3... El problema es que no sé los tiempos que tardan y hasta que no termine el script 3, el proceso del script 1 seguirá abierto y si aún no se ha liberado los periféricos del script 1, me dará problemas al intentar lanzarlo porque no se lanzará, o dará error, o algo... No?

Muuuuuuuchas gracias por vuestra ayuda. Cualquier opinión, link, sugestión será bienvenido!

Samy