Sobes.tech
Junior — Middle

Pourriez-vous expliquer ce qu'est un sémaphore et comment il est utilisé pour synchroniser les processus?

sobes.tech IA

Réponse de l'IA

Un sémaphore est un mécanisme de synchronisation utilisé pour gérer l'accès à une ressource partagée dans un environnement multithread ou multiprocessus. Il contient un compteur qui indique combien de threads ou processus peuvent accéder à la ressource simultanément.

Principe de fonctionnement :

  • Initialement, le compteur du sémaphore est réglé sur le nombre de ressources disponibles.
  • Lorsqu'un thread souhaite accéder, il appelle l'opération wait (ou acquire), qui diminue le compteur.
  • Si le compteur devient inférieur à zéro, le thread est bloqué en attendant la libération de la ressource.
  • Lorsqu'un thread libère la ressource, il appelle signal (ou release), qui augmente le compteur et débloque les threads en attente.

Sur iOS, pour travailler avec des sémaphores, on utilise souvent la classe DispatchSemaphore de GCD :

let semaphore = DispatchSemaphore(value: 1) // 1 indique que la ressource est disponible pour un thread

// Dans le thread :
semaphore.wait()   // attend que la ressource soit disponible
// Travail avec la ressource
semaphore.signal() // libère la ressource

Ainsi, les sémaphores aident à éviter les conditions de course et garantissent un accès correct aux ressources partagées.