Comparaison entre sémaphore et mutex.
Mutex
Les concepts sur le mutex est un peu comme le verrou. Lorsque vous voulez entrer dans une pièce , vous devez acquérir le verrou puis avoir la permission d’entrer. En informatique , le mutex est utilisé pour protéger une section critique empêchant d’autres threads d’accéder mutuellement au même code pour éviter une race condition.
Thread A Thread Bacquire mutex acquire mutex ... it will block
do something critical do something critical
release mutex release lock
C’est la clé d’une toilette. Une seule personne peut avoir la clé – occuper les toilettes – à la fois. Lorsqu’elle a terminé, cette personne donne (libère) la clé à la personne suivante dans la file d’attente.
Officiellement : « Les mutex sont généralement utilisés pour sérialiser l’accès à une section de code réentrant qui ne peut pas être exécutée simultanément par plus d’un thread. Un objet mutex ne permet qu’à un seul thread d’accéder à une section contrôlée, forçant les autres threads qui tentent d’accéder à cette section à attendre que le premier thread soit sorti de cette section. »
Ref : Symbian Developer Library
Semaphore
Pas comme les mutex, soit ils sont acquis, soit ils attendent d’être acquis. Le sémaphore peut fixer la valeur initiale à N>1. Nous pouvons utiliser cette valeur pour restreindre le nombre d’utilisateurs de ce processus qui seront autorisés à accéder à la section critique.
La principale différence entre le sémaphore et le mutex est que le mutex ne peut être libéré que par l’utilisateur qui le détient. Mais dans le mécanisme de sémaphore, tout utilisateur peut signaler à tout sémaphore spécifique dans le noyau. Cela peut assurer la concurrence des threads.
Voici le concept de sémaphore , Quand le thread A est OK, il signale le thread B alors le thread B commence à faire quelque chose.
Ce mécanisme assure la concurrence dans le processus.
Task A Task B
... Take BinSemaphore <== wait for something
Do Something Noteworthy
Give BinSemaphore do something <== unblocks
Il s’agit du nombre de clés de toilettes identiques libres. Exemple, disons que nous avons quatre toilettes avec des serrures et des clés identiques. Le compte du sémaphore – le nombre de clés – est fixé à 4 au début (les quatre toilettes sont libres), puis la valeur du compte est décrémentée au fur et à mesure que les gens entrent. Si toutes les toilettes sont pleines, c’est-à-dire qu’il n’y a plus de clés libres, le compte du sémaphore est de 0. Maintenant, quand éq. une personne quitte les toilettes, le sémaphore est augmenté à 1 (une clé libre), et donné à la personne suivante dans la file d’attente.
Officiellement : « Un sémaphore restreint le nombre d’utilisateurs simultanés d’une ressource partagée jusqu’à un nombre maximal. Les threads peuvent demander l’accès à la ressource (décrémenter le sémaphore), et peuvent signaler qu’ils ont fini d’utiliser la ressource (incrémenter le sémaphore). »
Ref : Symbian Developer Library
Risques
L’utilisation du mutex peut rencontrer une inversion de priorité. Vous devrez concevoir avec soin le scénario basé sur le mutex.