Junior — Middle
Dans quelles situations est-il approprié d'utiliser le mécanisme Semaphore pour la synchronisation des threads?
sobes.tech IA
Réponse de l'IA
Le mécanisme Semaphore (sémaphore) est utilisé pour limiter le nombre de threads accédant simultanément à une ressource ou une section critique.
Il est judicieux d'utiliser un sémaphore lorsque :
- Il faut limiter le nombre d'opérations simultanées, par exemple, l'accès à un pool de connexions ou à un nombre limité de fichiers.
- Il est nécessaire de contrôler le parallélisme pour éviter la surcharge du système.
- Une synchronisation des threads est requise lorsque plusieurs threads doivent attendre la libération d'une ressource.
Dans iOS, les sémaphores sont souvent utilisés pour gérer des tâches asynchrones, par exemple, pour attendre la fin de plusieurs opérations ou limiter le nombre de tâches exécutées simultanément.
Exemple d'utilisation de DispatchSemaphore en Swift :
let semaphore = DispatchSemaphore(value: 3) // maximum 3 threads simultanés
func accessResource() {
semaphore.wait() // décrémente le compteur, si 0, le thread se bloque
// Travail avec la ressource
print("Le thread a accédé")
sleep(1) // simulation de travail
semaphore.signal() // incrémente le compteur, libérant de la place
}
for _ in 1...10 {
DispatchQueue.global().async {
accessResource()
}
}
Dans cet exemple, pas plus de 3 threads pourront travailler avec la ressource en même temps.