Différence entre mutex et événement Différence entre

Anonim

Mutex vs Event

En C #, il y a beaucoup de différentes options de synchronisation de thread. 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 de donner aux threads l'option de bloquer jusqu'à ce qu'un événement soit diffusé ainsi le nom "event". "C'est la même chose que de dormir quelque chose et de ne le réveiller que lorsque quelque chose de significatif arrive. Les événements sont différents des mutex car les mutex n'ont pas l'option ou la fonction de signalisation. Les événements sont capables d'effacer le signal une fois que quelqu'un qui a pu attendre a été réveillé. Même les API sont capables de bloquer l'option jusqu'à ce qu'un ou tous les différents événements soient signalés. En outre, les événements sont des objets noyau. Ils ne sont pas "plus légers" comparés aux mutex. Un événement est essentiellement un objet 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. C'est une forme de mécanisme de coordination pour les ressources partagées. Pensez-y comme une forme de transaction. Vous n'êtes pas obligé d'attendre bien que vous vouliez accéder à quelques ressources partagées (uniquement dans le cas où d'autres y ont déjà accès) que vous bloquez. Un mutex se compose de deux états bien qu'il existe pour mettre en vigueur une exclusion mutuelle. C'est pour quand vous voulez protéger un bout de code qui met habituellement à jour une ressource partagée de la partie dans laquelle le mutex est revendiqué à la partie dans laquelle il sera libéré. Cela conduit au fait qu'aucun autre thread ne peut traverser la section.

Les personnes qui ont essayé de simuler un événement avec l'aide d'un mutex ont dû faire face au problème où, dès que le verrou est acquis ou que l'événement a été signalé, la personne empêche tout le monde de sortir jusqu'à ce que le verrou soit libéré. Ce n'est pas la sémantique d'un événement qui est signalé. Un événement peut rester affiché et un formulaire de validation sera disponible pour tous les tests de threads dans l'événement sans verrous. Le mutex commis à la synchronisation interprocess est en objet en mode noyau. Les événements effectués pour la synchronisation multithread sous une méthode sont 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 en raison de la réduction des cycles processeur. Mutex ressemble beaucoup à 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 les tâches ou pour gérer la planification des tâches pour certaines personnes.

Les événements sont davantage une variable de condition, contrairement à Mutex, qui ressemble plus à un moniteur

dans certains termes, ou 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 essentiellement un objet 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" est synonyme d'exclusion mutuelle. C'est une forme de mécanisme de coordination pour les ressources partagées.

4. Le mutex commis à la synchronisation interprocess est en objet en mode noyau. Les événements effectués pour la synchronisation multithread sous une méthode sont en mode utilisateur.

5. Les événements sont davantage une variable de condition, contrairement au Mutex, qui ressemble plus à un moniteur

dans certains termes, ou peut être une forme traditionnelle de sémaphore / mutex.