Handbuch zur dynamischen Ablaufverfolgung in Solaris

Prüfpunkte für Leser/Schreiber-Sperren

Leser/Schreiber-Sperren setzen eine Richtlinie um, die entweder mehrere Leser (reader) oder einen einzigen Schreiber (writer) in einem kritischen Abschnitt zulässt - nicht aber beides. Diese Sperren kommen in der Regel in Strukturen vor, die häufiger durchsucht als geändert werden und für die im kritischen Abschnitt viel Zeit vorgesehen ist. Wenn nicht viel Zeit im kritischen Abschnitt zur Verfügung steht, werden Leser/Schreiber-Sperren implizit über den für die Implementierung der Sperre genutzten gemeinsamen Speicher serialisiert. Dabei wird ihnen kein Vorrang gegenüber adaptiven Sperren eingeräumt. Unter rwlock(9F) finden Sie weitere Informationen zu Leser/Schreiber-Sperren.

Tabelle 18–4 zeigt die Prüfpunkte für Leser/Schreiber-Sperren. arg0 enthält für jeden Prüfpunkt einen Zeiger auf die krwlock_t-Struktur, die den adaptiven Lock darstellt.

Tabelle 18–4 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. arg1 enthält die Konstante RW_READER, wenn die Sperre als Leser erlangt wurde und RW_WRITER, wenn sie als Schreiber erlangt wurde.

rw-block

Contention-event-Prüfpunkt, der ausgelöst wird, nachdem ein an einer belegten Leser/Schreiber-Sperre blockierter Thread aufgewacht ist und die Sperre erlangt hat. arg1 enthält die Dauer (in Nanosekunden), die der aktuelle Thread schlafen gelegt wurde, bis er die Sperre erlangen konnte. arg2 enthält die Konstante RW_READER, wenn die Sperre als Leser erlangt wurde und RW_WRITER, wenn sie als Schreiber erlangt wurde. arg3 und arg4 enthalten weitere Informationen zu den Gründen für die Blockierung. arg3 ist nicht Null, wenn - und nur dann - die Sperre beim Blockieren des aktuellen Threads als Schreiber belegt war. arg4 enthält die Anzahl der Leser zum Zeitpunkt der Blockierung des aktuellen Threads. Wenn sowohl der Prüfpunkt rw-block als auch rw-acquire angegeben sind, wird rw-block vor rw-acquire ausgelöst.

rw-upgrade

Hold-event-Prüfpunkt, der ausgelöst wird, nachdem ein Thread eine Leser/Schreiber-Sperre erfolgreich vom Leser- auf den Schreiberstatus heraufgestuft hat. Für diese Upgrades gibt es kein Konkurrenzereignis, da sie nur über eine nicht-blockierende Schnittstelle, rw_tryupgrade(9F), möglich sind.

rw-downgrade

Hold-event-Prüfpunkt, der ausgelöst wird, nachdem ein Thread seinen Besitzerstatus für eine Leser/Schreiber-Sperre von Schreiber auf Leser herabgestuft hat. Für diese Downgrades gibt es keine Konkurrenzereignisse, da sie stets ohne Kollision erfolgen. 

rw-release

Hold-event-Prüfpunkt, der unmittelbar nach der Freigabe einer Leser/Schreiber-Sperre ausgelöst wird. arg1 enthält die Konstante RW_READER, wenn die freigegebene Sperre als Leser belegt wurde und RW_WRITER, wenn sie als Schreiber belegt wurde. Aufgrund von Up- und Downgrades wird die Sperre möglicherweise nicht in der Form freigegeben, in der sie erhalten wurde.