Mutex=Mutal Exclusion. Il s'agit en fait d'une valeur binaire, que l'on ne modifie que par des appels de fonction. Souvent, dans le jargon, on parle de prendre et vendre un mutex.
Pour prendre un mutex, il faut qu'il soit libre, c'est-à-dire qu'il n'a pas été pris avant. Pour libérer le mutex, lorsqu'une tâche l'a prise, on le "vend".
L'intéret des mutex est de protéger des zones critiques du code du proramme, par exemple, des zones où l'on accèdes à des variables globales. Ceci permet de s'assurer que des variables ne sont accéder que par une et une seule tâche en même temps, garantissant la validité des données.
Si une tâche essai de prendre un mutex déjà pris par une autre tâche, alors elle est bloquée et est mise dans une file d'attente. Lorsqu'une tâche libère son mutex, et s'il y a des tâches qui attendent le mutex, alors on prend une tâche de la file d'attente et on lui donne le mutex.
Si on utilise des mutex, et pas simplement des variables booléennes, c'est que les actions de "prendre" et "vendre", doivent être atomique, c'est-à-dire que de tels fonctions ne doivent pas être préemptée ou interrompue par l'execution d'une autre tâche. Ceci garantie l'intégrité des mutex et rend possible leur utilisation.
Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)