Sobes.tech
Junior — Middle

¿Podría explicar qué es un semáforo y cómo se utiliza para sincronizar procesos?

sobes.tech AI

Respuesta de la IA

El semáforo es un mecanismo de sincronización que se utiliza para gestionar el acceso a un recurso compartido en un entorno multihilo o multiproceso. Contiene un contador que indica cuántos hilos o procesos pueden acceder al recurso simultáneamente.

Principio de funcionamiento:

  • Inicialmente, el contador del semáforo se establece en el número de recursos disponibles.
  • Cuando un hilo quiere acceder, llama a la operación wait (o acquire), que disminuye el contador.
  • Si el contador se vuelve menor que cero, el hilo se bloquea, esperando a que se libere el recurso.
  • Cuando el hilo libera el recurso, llama a signal (o release), que incrementa el contador y desbloquea los hilos en espera.

En iOS, para trabajar con semáforos, a menudo se usa la clase DispatchSemaphore de GCD:

let semaphore = DispatchSemaphore(value: 1) // 1 significa que el recurso está disponible para un hilo

// En el hilo:
semaphore.wait()   // espera a que el recurso esté disponible
// Trabajo con el recurso
semaphore.signal() // libera el recurso

De esta forma, los semáforos ayudan a evitar condiciones de carrera y garantizan un acceso correcto a los recursos compartidos.