Différence entre Mutex et Event

Mutex vs Event

En C #, il existe de nombreuses options de synchronisation de threading. Les deux plus largement utilisés sont mutex et event. Juste quelle est exactement la différence entre ces deux? Lequel est une meilleure option?

L'option event permet aux threads de bloquer jusqu'à la diffusion d'un événement, d'où le nom «event». Cela revient à mettre quelque chose en veille et à ne le réveiller que lorsque quelque chose de significatif se produit. Les événements ne ressemblent pas aux mutex car les mutex n'ont pas l'option ou la fonction de signalisation. Les événements peuvent effacer le signal une fois que quelqu'un qui était capable de l'attendre a été réveillé. Même les API peuvent autoriser l'option de bloquer jusqu'à ce qu'un ou tous les événements soient signalés. De plus, les événements sont des objets du noyau. Ils ne sont pas "plus légers" par rapport aux mutex. Un événement est fondamentalement un objet du noyau ayant deux états. Normalement, un événement signale la venue d'un événement et parfois même la fin d'une opération d'E / S..

«Mutex» signifie exclusion mutuelle. Il s’agit d’une forme de mécanisme de coordination ciblé pour les ressources partagées. Pensez-y comme une forme de transaction. Vous n'êtes pas obligé d'attendre bien que vous souhaitiez accéder à quelques ressources partagées (uniquement dans le cas où d'autres personnes y ont déjà accès) que vous bloquez. Un mutex est constitué de deux états bien qu’il existe une exclusion mutuelle. Ceci est utile lorsque vous souhaitez protéger une portion de code qui met généralement à jour une ressource partagée de la partie dans laquelle le mutex est revendiqué à la partie dans laquelle il sera publié. Ceci conduit au fait qu'aucun autre thread ne peut traverser la section.

Les personnes qui ont essayé de simuler un événement à l'aide d'un mutex devaient rencontrer le problème suivant: dès que le verrou est acquis ou que l'événement est signalé, la personne garde tout le monde dehors jusqu'à ce que le verrou soit libéré. Ce n'est pas la sémantique d'un événement signalé. Un événement peut rester affiché et une forme de portail sera disponible pour tous les tests de thread dans le cas où aucun verrou ne serait détecté. Le mutex engagé dans la synchronisation interprocess est en objet en mode noyau. Les événements créés pour la synchronisation multithread sous une méthode sont en objet en mode utilisateur.

L'objet Mutex est trop lourd et trop général. Les objets d'événement sont beaucoup plus légers. La synchronisation en mode utilisateur est utilisée dans la plupart des situations car elle génère moins de cycles de processeur. Mutex est très semblable à une section critique et est utilisé pour synchroniser l'accès aux ressources partagées. Les événements ont une fonction totalement différente car ils sont utilisés pour synchroniser des tâches ou pour gérer la planification de tâches pour certaines personnes..

Les événements sont plus une variable de condition, à la différence de Mutex, qui ressemble plus à une
surveiller dans une partie de la terminologie, ou il peut être une forme traditionnelle de sémaphore / mutex.

Résumé:

1. L’option event permet aux threads de bloquer jusqu’à la diffusion d’un événement, d'où le nom «event».

2.Un événement est fondamentalement un objet du noyau ayant deux états. Normalement, un événement signale la venue d'un événement et parfois même la fin d'une opération d'E / S..

3. «Mutex» signifie exclusion mutuelle. Il s’agit d’une forme de mécanisme de coordination ciblé pour les ressources partagées..

4.Mutex engagé dans la synchronisation interprocessus est un objet en mode noyau. Les événements créés pour la synchronisation multithread sous une méthode sont en objet en mode utilisateur.

5.Les événements sont davantage une variable de condition, contrairement au Mutex, qui ressemble davantage à une
surveiller dans une partie de la terminologie, ou il peut être une forme traditionnelle de sémaphore / mutex.