Sobes.tech
Middle

¿Qué herramientas puedes usar para resolver problemas de sincronización de hilos?

sobes.tech AI

Respuesta de la IA

  • DispatchGroup: Para esperar a que finalice un grupo de tareas asíncronas.
  • DispatchSemaphore: Para limitar la cantidad de hilos que acceden simultáneamente a un recurso.
  • NSRecursiveLock: Permite que un hilo obtenga el bloqueo varias veces sin causar un bloqueo mutuo.
  • NSConditionLock: Bloqueo que solo puede ser obtenido cuando se cumple una condición específica.
  • Funciones OSAtomic: Operaciones atómicas de bajo nivel para casos simples (obsoletas, es preferible usar propiedades atómicas en Swift o std::atomic en C++).
  • @synchronized`: Directiva de Objective-C para crear una sección crítica.
// Ejemplo de uso de DispatchSemaphore para limitar el acceso a un recurso
import Dispatch

let semaphore = DispatchSemaphore(value: 2) // Permitimos solo 2 hilos simultáneamente

DispatchQueue.global().async {
    semaphore.wait() // Disminuye el contador, bloquea si es 0
    print("Hilo 1 en ejecución")
    sleep(1)
    print("Hilo 1 finalizado")
    semaphore.signal() // Aumenta el contador
}

DispatchQueue.global().async {
    semaphore.wait()
    print("Hilo 2 en ejecución")
    sleep(1)
    print("Hilo 2 finalizado")
    semaphore.signal()
}

DispatchQueue.global().async {
    semaphore.wait()
    print("Hilo 3 en ejecución")
    sleep(1)
    print("Hilo 3 finalizado")
    semaphore.signal()
}