Sobes.tech
Junior — Middle

Pouvez-vous expliquer le principe de fonctionnement d'un sémaphore en programmation multithread ?

sobes.tech IA

Réponse de l'IA

Un sémaphore est un mécanisme de synchronisation en programmation multithread qui contrôle l'accès à une ressource partagée. Il contient un compteur indiquant combien de threads peuvent accéder simultanément à la ressource.

Principe de fonctionnement :

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

Exemple en Swift utilisant DispatchSemaphore :

let semaphore = DispatchSemaphore(value: 2) // autorise 2 threads simultanément

DispatchQueue.global().async {
    semaphore.wait() // tente d'accéder
    print("Le thread a commencé à travailler")
    sleep(2) // simulation de travail
    print("Le thread a terminé de travailler")
    semaphore.signal() // libère la ressource
}

Ainsi, le sémaphore aide à limiter le nombre de threads travaillant simultanément sur une ressource partagée, évitant les conditions de course et assurant l'intégrité des données.