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 ostd::atomicen 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()
}