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(oacquire), 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(orelease), 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.