Sincronización de Hilos: Funcionamiento de Cerrojos, Semáforos y Barreras
Clasificado en Informática
Escrito el en
español con un tamaño de 2,42 KB
Cerrojos (Latches)
Un cerrojo actúa como una puerta: hasta que el cerrojo no alcance el estado final, la puerta permanecerá cerrada y ningún hilo podrá pasar. Si alcanza dicho estado final, la puerta se abrirá permitiendo pasar a todos los hilos. Una vez que el cerrojo ha alcanzado su estado final, este no podrá cambiar su estado, por lo que permanecerá abierto siempre.
Implementación con CountDownLatch
CountDownLatch es una implementación flexible del cerrojo que simplemente inicializa un contador a un valor igual al número de hilos que se van a ejecutar de forma concurrente; cada hilo deberá invocar el método countDown() de CountDownLatch al terminar su ejecución.
El hilo principal, una vez que manda ejecutar todos los hilos, espera a que estos terminen; para lograrlo, se invoca el método await(). Cuando el contador llega a cero, el hilo principal sale del await() y continúa su ejecución de forma normal.
Semáforos
Los semáforos se utilizan para controlar el número de actividades que pueden acceder a un cierto recurso o realizar una acción dada al mismo tiempo. Un semáforo gestiona un conjunto de permisos virtuales; el número inicial de permisos se le pasa al constructor del Semaphore.
Las actividades pueden adquirir permisos y liberarlos cuando hayan terminado. Si no hay permisos, el hilo se bloqueará hasta que uno de ellos se libere (o hasta que haya una interrupción o se agote el tiempo de la operación).
Semáforo Binario y Mutex
Un tipo de semáforo es el semáforo binario, el cual tiene un contador inicial de uno. Un semáforo binario puede ser usado como un mutex sin bloqueos semánticos reentrantes; quien tiene el único permiso, posee el mutex.
Barreras
Es importante destacar que los cerrojos son objetos de un solo uso; una vez que el cerrojo entra en el estado final, ya no se puede reiniciar. Las barreras son similares a los cerrojos en cuanto se refiere a bloquear grupos de hilos hasta que ocurre un evento, con la salvedad de que todos los hilos deben llegar juntos al punto de la barrera a la vez para continuar.
En conclusión, los cerrojos esperan eventos, mientras que las barreras esperan por el resto de hilos.