Sobes.tech
Junior — Middle

¿En qué situaciones es apropiado utilizar el mecanismo Semaphore para la sincronización de hilos?

sobes.tech AI

Respuesta de la IA

El mecanismo Semaphore (semáforo) se utiliza para limitar la cantidad de hilos que acceden simultáneamente a un recurso o sección crítica.

Es recomendable usar un semáforo cuando:

  • Se necesita limitar el número de operaciones simultáneas, por ejemplo, acceso a un grupo de conexiones o a un número limitado de archivos.
  • Es necesario controlar el paralelismo para evitar sobrecargar el sistema.
  • Se requiere sincronización entre hilos, cuando varios hilos deben esperar a que un recurso esté disponible.

En iOS, los semáforos se usan a menudo para gestionar tareas asíncronas, por ejemplo, para esperar a que finalicen varias operaciones o limitar la cantidad de tareas que se ejecutan simultáneamente.

Ejemplo de uso de DispatchSemaphore en Swift:

let semaphore = DispatchSemaphore(value: 3) // máximo 3 hilos simultáneos

func accessResource() {
    semaphore.wait() // decrementa el contador, si es 0, el hilo se bloquea
    // Trabajo con el recurso
    print("El hilo ha accedido")
    sleep(1) // simulación de trabajo
    semaphore.signal() // incrementa el contador, liberando espacio
}

for _ in 1...10 {
    DispatchQueue.global().async {
        accessResource()
    }
}

En este ejemplo, no más de 3 hilos podrán trabajar con el recurso al mismo tiempo.