Handbuch zur dynamischen Ablaufverfolgung in Solaris

Mutex-Prüfpunkte

Mutexe schützen kritische Abschnitte durch gegenseitigen Ausschluss. Wenn ein Thread versucht, über mutex_lock(3C) oder pthread_mutex_lock(3C) einen von einem anderen Thread belegten Mutex zu erhalten, wird zunächst festgestellt, ob der Besitzer-Thread auf einer anderen CPU läuft. Ist dies der Fall, tritt der fordernde Thread für kurze Zeit in eine Warteschleife ein und wartet, bis der Mutex verfügbar wird. Wenn der Besitzer nicht auf einer anderen CPU läuft, wird der fordernde Thread blockiert.

Die vier plockstat-Prüfpunkte für Mutexe sind in Tabelle 31–1 aufgeführt. arg0 enthält für jeden Prüfpunkt einen Zeiger auf die Struktur mutex_t oder pthread_mutex_t (identische Typen), die den Mutex darstellen.

Tabelle 31–1 Mutex-Prüfpunkte

mutex-acquire

Hold-event-Prüfpunkt, der unmittelbar nach dem Erlangen eines Mutex ausgelöst wird. arg1 enthält einen booleschen Wert, der angibt, ob es sich um einen rekursiven Erwerb eines rekursiven Mutex handelt. arg2 gibt an, wie oft der fordernde Thread die Warteschleife für diesen Mutex durchlaufen hat. arg2 ist nur dann nicht Null, wenn der Prüfpunkt mutex-spin für diesen Mutex-Erwerb ausgelöst wurde.

mutex-block

Contention-event-Prüfpunkt, der ausgelöst wird, bevor ein Thread durch einen belegten Mutex blockiert wird. Für das Erlangen einer einzigen Sperre können sowohl mutex-block als auch mutex-spin ausgelöst werden.

mutex-spin

Contention-event-Prüfpunkt, der ausgelöst wird, bevor ein Thread durch einen belegten Mutex in den Wartezustand versetzt wird. Für das Erlangen einer einzigen Sperre können sowohl mutex-block als auch mutex-spin ausgelöst werden.

mutex-release

Hold-event-Prüfpunkt, der unmittelbar nach der Freigabe eines Mutex ausgelöst wird. arg1 enthält einen booleschen Wert, der angibt, ob es sich bei dem Ereignis um eine rekursive Freigabe eines rekursiven Mutex handelt.

mutex-error

Fehlerereignis-Prüfpunkt, der bei Fehlern in einer Mutex-Operation ausgelöst wird. arg1 ist der errno-Wert für den aufgetretenen Fehler.