Middle — Middle+
Comment peut-on prévenir les conditions de course dans un environnement multithread ?
sobes.tech IA
Réponse de l'IA
Pour prévenir les conditions de course dans un environnement multithread sur iOS, on utilise des mécanismes de synchronisation qui garantissent un accès séquentiel aux ressources partagées :
- Sémaphores et mutex (par exemple,
DispatchSemaphore,NSLock) — bloquent l'accès à la section critique du code jusqu'à ce qu'un autre thread libère la ressource. - Queues de dispatch sérialisées — files GCD qui garantissent l'exécution des tâches dans l'ordre.
- Opérations atomiques — opérations qui s'exécutent en totalité sans interruption.
- Utilisation de
@synchronized— sucre syntaxique pour verrouiller des objets.
Exemple avec DispatchQueue :
let serialQueue = DispatchQueue(label: "com.example.serialQueue")
var sharedResource = 0
serialQueue.async {
sharedResource += 1
}
serialQueue.async {
sharedResource += 1
}
Ici, les modifications de sharedResource se produisent de manière séquentielle, ce qui évite les conditions de course.