Mutex

Ein Mutex ist ein Synchronisierungsobjekt ähnlich einem Semaphor. Der durch einen Mutex geschützte kritische Bereich kann nur von einem Thread betreten werden. Daher auch der Name Mutex (mutual exclusion - gegenseitiger Ausschluss).
 
Im Gegensatz dazu kann ein Semaphor eine vorgegebene Höchstzahl (auch grösser eins) von Threads passieren lassen. Der zweite Unterschied zwischen einem Mutex und einem Semaphor besteht darin, dass ein Thread sich nicht selbst mit dem Mutex blockieren kann. Ein Mutex kann nur von dem Thread freigegeben werden, der den Mutex blockiert hat. Die Freigabemethode release eines Semaphors kann von beliebigen Threads aufgerufen werden, auch wenn sie noch nie die aquire-Methode des Semaphors aufgerufen haben.

Wenn ein neuer Mutex erzeugt wird, ist er zunächst nicht im Besitz eines Threads.

Durch Aufrufen der Methode aquire kann ein Thread versuchen, in den Besitz des Mutexes zu gelangen. Wenn der Mutex noch nicht im Besitz eines Threads war, wird der aufrufende Thread zum Besitzer.

Ist der aufrufende Thread bereits Besitzer des Mutexes, wird nur ein interner Zähler erhöht, der Thread jedoch nicht blockiert. Der Zähler dient dazu, den Mutex nur dann freizugeben, wenn der besitzende Thread für jeden Aufruf von aquire auch einen Aufruf von release ausführt.

Ist der aufrufende Thread nicht der Besitzer des Mutexes und der Mutex ist blockiert, so wird der Thread angehalten.

Wenn der besitzende Thread für jeden Aufruf von aquire einmal die Methode release ruft, gibt er den Mutex zurück. Wenn Threads auf den Mutex warten, wird der am längsten wartende Thread zum neuen Besitzer. Wartet kein Thread, ist der Mutex nach dem Methodenaufruf frei.