Junior — Middle
¿Puede explicar el principio de funcionamiento de un semáforo en la programación multihilo?
sobes.tech AI
Respuesta de la IA
Un semáforo es un mecanismo de sincronización en programación multihilo que controla el acceso a un recurso compartido. Contiene un contador que indica cuántos hilos pueden acceder simultáneamente al recurso.
Principio de funcionamiento:
- Inicialmente, el contador del semáforo se establece en un número igual a la cantidad de recursos disponibles.
- Cuando un hilo quiere acceder, llama a la operación "wait" (o "acquire"), que disminuye el contador en 1.
- Si el contador se vuelve menor que cero, el hilo se bloquea y espera hasta que otro hilo libere el recurso.
- Cuando un hilo libera el recurso, llama a la operación "signal" (o "release"), que incrementa el contador en 1 y desbloquea los hilos en espera.
Ejemplo en Swift usando DispatchSemaphore:
let semaphore = DispatchSemaphore(value: 2) // permitimos 2 hilos simultáneamente
DispatchQueue.global().async {
semaphore.wait() // intentamos acceder
print("Hilo comenzó a trabajar")
sleep(2) // simulación de trabajo
print("Hilo terminó de trabajar")
semaphore.signal() // liberamos el recurso
}
De esta forma, el semáforo ayuda a limitar la cantidad de hilos que trabajan simultáneamente con un recurso compartido, previniendo condiciones de carrera y asegurando la integridad de los datos.