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.