Différence entre les Mutex, Sémaphore & Verrous de rotation
Je suis en train de faire des expériences avec l'IPC, en particulier avec des Mutex, Sémaphore et Verrou de rotation.
Ce que j'ai appris est Mutex est utilisé pour le Verrouillage Asynchrone (avec couchage (selon les théories que j'ai lu sur le NET)) Mécanisme de Sémaphore sont Synchrones de Verrouillage (avec Signalisation et de Sommeil) Mécanisme et Verrous de rotation sont Synchrones, mais Non de couchage Mécanisme.
Quelqu'un peut m'aider à clarifier ces choses profondément?
Et un autre doute qui est sur le Mutex, quand j'ai écrit le programme avec fil & mutex, tandis qu'un thread est en cours d'exécution un autre thread n'est pas en état de Sommeil, mais il s'efforce en permanence d'acquérir le Verrou. Donc Mutex est en veille ou Non de dormir???
- Je pense que vous aussi, vous avez envie de lire ce post aussi. stackoverflow.com/questions/5869825/...
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, rappelez-vous le but de ces 'synchronisation d'objets' :
Ces objets ont été conçus pour fournir un efficace et cohérente utilisation de "partage de données" entre plus de 1 fil de entre 1 processus ou à des processus différents.
Ces objets peuvent être "acquises" ou "libéré".
Ce que c'est!!! Fin de l'histoire!!!
Maintenant, si elle contribue à vous, permettez-moi de mettre mon grain de sable:
1) Section Critique= objet Utilisateur utilisé pour permettre l'exécution de juste un thread actif de beaucoup d'autres dans un délai d'un processus de. Les autres threads sélectionnés (@ l'acquisition de cet objet) sont mis à sommeil.
[Sans interprocessus capacité, très primitive de l'objet].
2) Mutex, Sémaphore (aka Mutex)= objet de Noyau utilisé pour permettre l'exécution de juste un thread actif de beaucoup d'autres, dans un délai d'un processus de ou entre les différents processus. Les autres threads sélectionnés (@ l'acquisition de cet objet) sont mis à sommeil. Cet objet prend en charge thread à la propriété, le fil notification de résiliation, la récursivité (plusieurs 'acquérir' des appels de même thread) et "inversion de priorité évitement".
[Interprocessus capacité, très sûr à utiliser, une sorte de "haut niveau" de la synchronisation de l'objet].
3) Comptage Sémaphore (aka Sémaphore)= objet de Noyau utilisé pour permettre l'exécution de un groupe de threads actifs de beaucoup d'autres, dans un délai d'un processus de ou entre les différents processus. Les autres threads sélectionnés (@ l'acquisition de cet objet) sont mis à sommeil.
[Interprocessus capacité cependant pas très sûr à utiliser car il manque suivantes mutex attributs: fil notification de résiliation, la récursivité?, 'inversion de priorité évitement"?, etc].
4) Et maintenant, à parler de "spinlocks", d'abord quelques définitions:
Région critique= Une région de mémoire partagée par 2 ou plusieurs processus.
Lock= Une variable dont la valeur permet ou interdit l'entrée à une "critique de la région". (Il pourrait être mis en œuvre comme un simple indicateur booléen').
Occupé attente= Continuellement test d'une variable jusqu'à une certaine valeur apparaît.
Enfin:
Spin-lock (aka Spinlock)= Un de verrouillage qui utilise occupé attente. (L'acquisition de la de verrouillage est faite par xchg ou similaire opérations atomiques).
[Sans fil de couchage, utilisé surtout au niveau du noyau seulement. Ineffcient pour le niveau de l'Utilisateur code].
Un dernier commentaire, je ne suis pas sûr, mais je suis prêt à parier beaucoup d'argent que les 3 premiers synchronisation d'objets (#1, #2 et #3) faire usage de cette simple bête (#4) dans le cadre de leur mise en œuvre.
Une bonne journée!.
Références:
-En Temps réel des Concepts pour les Systèmes Embarqués par les Qing Li avec Caroline Yao (CMP Livres).
-Systèmes d'Exploitation modernes (3e) par Andrew Tanenbaum (Pearson Internationale de l'Éducation).
-Programmation d'Applications pour Microsoft Windows (4e) par Jeffrey Richter (Microsoft Programmation de la Série).
weak
a été déplacée. Ce qui manque, c'est qu'ils sont - ou plutôt devrait être utilisé de façon très différente. De la nécessité, d'unemutex
est détenue par un thread, qui devez le déverrouiller quand il est fait. Donc le code estlock mutex / do stuff / unlock mutex
. En revanche, un sémaphore peut être passé autour; c'est comme un baton dans un bâton de course. Je suis d'accord avec barrgroup.com/Embedded-Systems/How-To/RTOS-Mutex-Semaphore - que les sémaphores peuvent avoir count > 1 est un accident historique, qui ne doit pas être utilisé...get semaphor / do stuff / release semaphor
, c'est probablement une dangereuse tentative d'utilisation d'un comptage de sémaphore. C'est malheureusement une évolution historique que quelqu'un a remarqué que les sémaphores pourrait "facilement" ont un nombre, donc la conversion d'un coffre-fort concept (passant autour d'une baguette ou d'un jeton) dans un dangereux concept.Voici une bonne explication de la différence entre les sémaphores et les mutex:
http://blog.feabhas.com/2009/09/mutex-vs-semaphores---partie-1-les sémaphores/
La réponse a à voir avec la propriété au moins avec les sémaphores binaires, mais je vous suggère de lire l'article en entier.