141 votes

Quelle est la différence entre mutex et section critique ?

Veuillez expliquer les points de vue de Linux et de Windows.

Je programme en C#, ces deux termes peuvent-ils faire une différence ? Veuillez poster autant que vous le pouvez, avec des exemples et tels.....

Merci

14voto

Tim Post Points 21270

L'équivalent Windows "rapide" de la sélection critique sous Linux serait un futex qui signifie "fast user space mutex". La différence entre un futex et un mutex est qu'avec un futex, le noyau n'est impliqué que lorsqu'un arbitrage est nécessaire, ce qui permet d'éviter de parler au noyau à chaque fois que le compteur atomique est modifié. Un futex peut également être partagé entre des processus, en utilisant les moyens que vous utiliseriez pour partager un mutex.

Malheureusement, les futex peuvent être très difficile à mettre en œuvre (PDF).

Au-delà de ça, c'est à peu près la même chose sur les deux plateformes. Vous effectuez des mises à jour atomiques, pilotées par jeton, d'une structure partagée d'une manière qui (espérons-le) ne provoque pas de famine. Ce qui reste est simplement la méthode pour accomplir cela.

6voto

Promit Points 2739

Sous Windows, une section critique est locale à votre processus. Un mutex peut être partagé/accédé par plusieurs processus. Fondamentalement, les sections critiques sont beaucoup moins chères. Je ne peux pas faire de commentaires spécifiques sur Linux, mais sur certains systèmes, ce sont juste des alias pour la même chose.

6voto

Martin Points 85

Pour ajouter mon grain de sel, les sections critiques sont définies comme une structure et les opérations sur elles sont effectuées dans le contexte du mode utilisateur.

ntdll!\_RTL\_CRITICAL\_SECTION
   +0x000 DebugInfo        : Ptr32 \_RTL\_CRITICAL\_SECTION\_DEBUG
   +0x004 LockCount        : Int4B
   +0x008 RecursionCount   : Int4B
   +0x00c OwningThread     : Ptr32 Void
   +0x010 LockSemaphore    : Ptr32 Void
   +0x014 SpinCount        : Uint4B

Alors que les mutex sont des objets du noyau (ExMutantObjectType) créés dans le répertoire d'objets de Windows. Les opérations Mutex sont principalement mises en œuvre en mode noyau. Par exemple, lorsque vous créez un Mutex, vous finissez par appeler nt!NtCreateMutant dans le noyau.

0voto

Karthick Points 648

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X