805 votes

Qu'est-ce qu'un mutex?

Un mutex est un concept de programmation fréquemment utilisé pour résoudre des problèmes de multi-threading. Ma question à la communauté:

Qu'est-ce qu'un mutex et comment l'utilisez-vous?

2538voto

Xetius Points 10445

Quand je vais avoir une grosse discussion animée au travail, j'utilise un caoutchouc de poulet que je garde dans mon bureau juste pour de telles occasions. La personne tenant le poulet est la seule personne qui est autorisé à parler. Si vous ne détenez pas le poulet, vous ne peut pas parler. Vous ne pouvez indiquer que vous souhaitez que le poulet et attendre jusqu'à ce que vous obtenez avant de vous parler. Une fois que vous avez fini de parler, vous pouvez remettre le poulet de retour pour le modérateur qui part à la prochaine personne à parler. Ceci assure que les gens ne parlent pas les uns sur les autres, et ont aussi leur propre espace de discussion.

Remplacer le Poulet avec les Mutex et la personne avec le fil et en gros, vous avez le concept d'un mutex.

Bien sûr, il n'y a pas une telle chose comme un caoutchouc de mutex. Uniquement en caoutchouc de poulet. Mes chats ont eu une souris en caoutchouc, mais ils l'ont mangé.

Bien sûr, avant d'utiliser le caoutchouc de poulet, vous devez vous demander si vous avez réellement besoin de 5 personnes dans une chambre et il ne serait pas juste être plus facile avec une personne dans la salle sur leurs propres à faire tout le travail. En fait, c'est juste l'extension de l'analogie, mais vous obtenez l'idée.

182voto

Craig Points 5169

Un Mutex est un drapeau mutuellement exclusif. Il agit comme un gardien de porte à une section de code permettant un fil dans et bloquer l'accès à tous les autres. Cela garantit que le code contrôlé ne sera touché que par un seul thread à la fois. Assurez-vous de libérer le mutex lorsque vous avez terminé. :)

97voto

TheSmurf Points 10872

L'Exclusion Mutuelle. Voici l'entrée de Wikipedia sur:

http://en.wikipedia.org/wiki/Mutual_exclusion

Le point d'un mutex est de synchroniser les deux threads. Lorsque vous avez deux threads tentent d'accéder à une ressource unique, la tendance générale est d'avoir le premier bloc de code d'accès pour définir le mutex avant d'entrer dans le code. Lors de la deuxième code de bloquer les tentatives d'accès, elle voit le mutex est définie et attend jusqu'à ce que le premier bloc de code est complet (et nations unies-séries le mutex), puis continue.

Certains détails de la façon dont il est réalisé, évidemment, varie grandement d'un langage de programmation.

74voto

Mats Fredriksson Points 7136

Lorsque vous avez une application multi-thread, les différents threads partagent parfois une ressource commune, comme une variable ou similaire. Cette source ne peut souvent pas être accessibles en même temps, si une construction est nécessaire pour s'assurer qu'un seul thread à l'aide de cette ressource à la fois.

Le concept est appelé "exclusion mutuelle" (court Mutex), et est un moyen de s'assurer qu'un seul thread est autorisé à l'intérieur de cette zone, l'utilisation de la ressource etc.

La façon de les utiliser est un langage spécifique, mais est souvent (voire toujours) basé sur un système d'exploitation mutex.

Certaines langues n'a pas besoin de cette construction, en raison du paradigme, par exemple de la programmation fonctionnelle (Haskell, ML sont de bons exemples).

Maintenant, allez demander à google comment les utiliser! :)

26voto

Anthony Mastrean Points 8582

En C#, la commune de mutex utilisé est le Moniteur. Le type est"le Système de.Le filetage.Surveiller'. Il peut également être utilisé implicitement par le biais du"lock(Objet)' déclaration. Un exemple de son utilisation est lors de la construction d'une classe Singleton.

private static readonly Object instanceLock = new Object();
private static MySingleton instance;
public static MySingleton Instance
{
    lock(instanceLock)
    {
        if(instance == null)
        {
            instance = new MySingleton();
        }
        return instance;
    }
}

Le verrouillage de l'énoncé à l'aide de la privé de verrouillage de l'objet crée une section critique. Demander à chaque thread d'attendre jusqu'à ce que le précédent est terminé. Le premier thread qui va entrer dans la partie et initialiser l'instance. Le deuxième thread va attendre, le faire dans la section, et d'obtenir la initialisée instance.

Toute sorte de synchronisation d'un membre statique peut utiliser l'instruction verrouillage de la même façon.

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