Junior — Middle
¿Puedes explicar qué es un semáforo en el contexto de la programación y la sincronización de hilos?
sobes.tech AI
Respuesta de la IA
Un semáforo es un mecanismo de sincronización que se utiliza para controlar el acceso de múltiples hilos a un recurso compartido.
Contiene un contador que indica cuántos hilos pueden acceder simultáneamente al recurso. Cuando un hilo quiere entrar en la sección crítica, intenta "capturar" el semáforo:
- Si el contador es mayor que cero, se decrementa en uno y el hilo continúa.
- Si el contador es cero, el hilo se bloquea y espera a que otro hilo libere el semáforo.
Cuando un hilo termina de usar el recurso, libera el semáforo incrementando el contador, permitiendo que otros hilos continúen.
Ejemplo de uso de semáforo en Swift (iOS):
let semaphore = DispatchSemaphore(value: 2) // permitimos 2 hilos simultáneamente
DispatchQueue.global().async {
semaphore.wait() // intentamos capturar el semáforo
print("Hilo comenzó a trabajar")
sleep(2) // simulación de trabajo
print("Hilo terminó de trabajar")
semaphore.signal() // liberamos el semáforo
}
De esta forma, el semáforo ayuda a controlar la cantidad de hilos que trabajan simultáneamente con un recurso compartido, previniendo condiciones de carrera y asegurando la corrección del funcionamiento.