Équivalent de @synchronized d'Objective-C en Swift : synchronisation correcte des threads
Bonjour à tous ! Je viens tout juste de passer d'Objective-C à Swift et j'ai rencontré un problème de synchronisation de l'accès aux données partagées depuis différents threads. En Objective-C, j'avais l'habitude d'utiliser une construction simple :
```objc
@synchronized(self) {
// section critique
self.someProperty = newValue;
}
```
Elle garantissait qu'un seul thread exécutait le code à l'intérieur du bloc à la fois. En Swift, cette syntaxe n'existe pas. Je sais que Swift dispose de GCD (Grand Central Dispatch), mais je ne suis pas sûr de la bonne façon d'organiser la synchronisation.
Problème : j'ai une classe de cache à laquelle accèdent plusieurs threads. Voici une version simplifiée :
```swift
class Cache {
private var storage: [String: Any] = [:]
func set(value: Any, forKey key: String) {
storage[key] = value
}
func get(forKey key: String) -> Any? {
return storage[key]
}
}
```
En cas d'accès concurrent depuis plusieurs threads, il y a une data race. Comment implémenter correctement
No answers yet.
Connectez-vous pour laisser une réponse