Sobes.tech
Junior — Middle

Pouvez-vous expliquer ce qu'est un sémaphore dans le contexte de la programmation et de la synchronisation des threads?

sobes.tech IA

Réponse de l'IA

Un sémaphore est un mécanisme de synchronisation utilisé pour contrôler l'accès de plusieurs threads à une ressource partagée.

Il contient un compteur indiquant combien de threads peuvent accéder simultanément à la ressource. Lorsqu'un thread souhaite entrer dans la section critique, il tente de "capturer" le sémaphore :

  • Si le compteur est supérieur à zéro, il est décrémenté de un, et le thread continue.
  • Si le compteur est égal à zéro, le thread se bloque et attend qu'un autre thread libère le sémaphore.

Lorsqu'un thread termine d'utiliser la ressource, il libère le sémaphore en augmentant le compteur, permettant à d'autres threads de continuer.

Exemple d'utilisation d'un sémaphore en Swift (iOS) :

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

DispatchQueue.global().async {
    semaphore.wait() // tente de capturer le sémaphore
    print("Le thread a commencé à travailler")
    sleep(2) // simulation de travail
    print("Le thread a terminé de travailler")
    semaphore.signal() // libère le sémaphore
}

Ainsi, le sémaphore aide à contrôler le nombre de threads travaillant simultanément avec une ressource partagée, évitant les conditions de course et assurant la correction du fonctionnement.