Peut-on appliquer la synchronisation (synchronized) à une variable?
sobes.tech IA
Réponse de l'IA
Non, le mot-clé synchronized n'existe pas en Swift. Pour synchroniser l'accès aux variables dans des environnements multithread, d'autres mécanismes sont utilisés :
-
Queues de dispatch : Les queues sériales permettent d'exécuter des blocs de code de manière séquentielle, garantissant qu'un seul thread travaille avec la variable à la fois.
// Queue série pour la synchronisation let queue = DispatchQueue(label: "com.myapp.syncQueue") var sharedVariable = 0 func updateSharedVariable() { queue.sync { // Accès synchrone à la variable dans la queue sharedVariable += 1 print(sharedVariable) } } -
NSLock/NSRecursiveLock : Permettent de bloquer l'accès à une section de code.
import Foundation let lock = NSLock() var sharedArray = [Int]() func addToSharedArray(value: Int) { lock.lock() // Capture du mutex sharedArray.append(value) print("Ajouté : \(value). Array : \(sharedArray)") lock.unlock() // Libération du mutex } -
Opérations et Files d'Opérations : Offrent une méthode de haut niveau pour gérer des tâches parallèles, y compris les dépendances et les priorités.
-
@synchronized(Objective-C) : En Objective-C, un mécanisme similaire existait, mais il n'est pas directement disponible en Swift et nécessite l'utilisation de ponts avec Objective-C. Il est recommandé d'utiliser des solutions natives Swift (Dispatch Queues, Locks).
Le choix du mécanisme dépend de la nature de la tâche. Les Dispatch Queues sont souvent la méthode la plus pratique et efficace pour une synchronisation simple de l'accès aux données.