Otra forma de sincronización son los semáforos. Son útiles para evitar que dos acciones se ejecuten a la vez e ir encadenándolas. Primero se crea una referencia del semáforo, con Acquire Semaphore se adquiere el testigo hasta que llega a Release Semaphore que libera el testigo. Finalmente hay que cerrar la referencia.
Mediante un ejemplo de Labview, vamos a comprobar su funcionamiento. El programa consiste en un indicador de nivel que va mostrando los valores entre -1000 y 1000.
El panel frontal consiste en un indicador de nivel y un pulsador de paro.
En el diagrama de bloques lo primero que nos encontramos es la inicialización del indicador. La función first call, devuelve true en el instante inicial, lo que activa el case e inicializa a 0 el indicador.
Creamos la referencia del semáforo, se llamará paso de testigo.
A continuación, nos encontramos con dos bucles. Gracias al Acquire Semaphore se adquiere el testigo, primero se ejecuta el bucle de arriba y hasta que no se libere el testigo, no se ejecuta el de abajo.
Finalmente se cierra la referencia del semáforo.
En el primer paso de testigo, se va sumando 1 al indicador de nivel hasta llegar a 1000 que sale del bucle y libera el testigo. Esta suma se ejecuta cada 2 ms. También nos encontramos en los finales de bucle el pulsador de paro.
El segundo bucle es semejante, a diferencia que va restando 1 al indicador de nivel hasta llegar a -1000.
Podemos observa su funcionamiento:
No hay comentarios:
Publicar un comentario