Sobes.tech
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.