Leser/Schreiber-Sperren erlauben entweder mehreren Lesern oder einem einzigen Schreiber den gleichzeitigen Zugriff auf einen kritischen Abschnitt. Diese Sperren kommen in der Regel in Strukturen vor, die häufiger durchsucht als geändert werden, oder bei Threads, die viel Zeit im kritischen Abschnitt verbringen. Benutzer interagieren mit Leser/Schreiber-Sperren über die Solaris-Schnittstelle rwlock(3C) oder die POSIX-Schnittstelle pthread_rwlock_init(3C).
Tabelle 31–2 zeigt die Prüfpunkte für Leser/Schreiber-Sperren. arg0 enthält für jeden Prüfpunkt einen Zeiger auf die Struktur rwlock_t oder pthread_rwlock_t (identische Typen), die die adaptive Sperre darstellen. arg1 enthält einen booleschen Wert, aus dem hervorgeht, ob es sich bei der Operation um einen Schreiber handelt.
Tabelle 31–2 Prüfpunkte für Leser/Schreiber-Sperren
rw-acquire |
Hold-event-Prüfpunkt, der unmittelbar nach dem Erlangen einer Leser/Schreiber-Sperre ausgelöst wird. |
rw-block |
Contention-event-Prüfpunkt, der ausgelöst wird, bevor ein Thread in dem Versuch, eine Sperre zu erlangen, blockiert wird. Wenn sie aktiviert sind, werden die Prüfpunkte rw-acquire und rw-error nach rw-block ausgelöst. |
rw-release |
Hold-event-Prüfpunkt, der unmittelbar nach der Freigabe einer Leser/Schreiber-Sperre ausgelöst wird. |
rw-error |
Fehlerereignis-Prüfpunkt, der bei Fehlern während einer Operation mit einer Leser/Schreiber-Sperre ausgelöst wird. arg1 ist der errno-Wert des aufgetretenen Fehlers. |