pthread_mutexattr_setkind_np(3-thr) pthread_mutexattr_setkind_np(3-thr)
NAME
pthreadmutexattrsetkindnp - Attribut für den Mutex-Typ angeben
SYNTAX
#include <pthread.h>
int pthreadmutexattrsetkindnp(
pthreadmutexattrt *attr,
int kind);
PARAMETER
attr Das Objekt für Mutex-Attribute, das geändert wird.
kind Neuer Wert des Attributs für den Mutex-Typ. Der Parameter
kind gibt den Typ des erstellten Mutex an. Gültige Werte
sind MUTEXFASTNP (Standardwert), MUTEXRECURSIVENP und
MUTEXNONRECURSIVENP.
BESCHREIBUNG
Die Routine pthreadmutexattrsetkindnp() setzt das Attribut für den
Mutex-Typ, das beim Erstellen eines Mutex verwendet wird.
Ein schneller (fast) Mutex wird auf die schnellstmögliche Weise
gesperrt und entsperrt. Ein solcher Mutex kann nur einmal gesperrt
(abgerufen) werden. Bei allen nachfolgenden Aufrufen von
pthreadmutexlock() wird der aufrufende Thread so lange blockiert,
bis der Mutex durch den Thread, der Eigner dieses Mutex ist, freigege-
ben wird. Wenn der Thread, der Eigner des Mutex ist, selbst versucht,
diesen erneut zu sperren, wartet der Thread darauf, daß er selbst den
Mutex freigibt (und verursacht so einen Deadlock).
Ein rekursiver Mutex kann mehrmals durch denselben Thread gesperrt
werden, ohne daß hierdurch ein Deadlock des Thread verursacht wird. In
anderen Worten, ein einzelner Thread kann mehrere aufeinanderfolgende
Aufrufe von pthreadmutexlock() ausgeben, ohne daß er blockiert wird.
Der Thread muß dann die Routine pthreadmutexunlock() so oft aufru-
fen, wie er zuvor die Routine pthreadmutexlock() aufgerufen hat,
damit der Mutex von einem anderen Thread gesperrt werden kann.
Ein nicht rekursiver Mutex wird wie beim Typ des schnellen Mutex nur
einmal von einem Thread gesperrt. Wenn der Thread versucht, den Mutex
erneut zu sperren, ohne ihn vorher zu entsperren, wird ein Fehler aus-
gegeben. Demnach sind nicht rekursive Mutexe informativer als schnelle
Mutexe, da letztere den Thread ohne Fehlermeldung blockieren, so daß
es Ihre Sache ist, herauszufinden, warum der Thread nicht weiter aus-
geführt wird. Außerdem wird bei einem nicht rekursiven Mutex auch dann
ein Fehler zurückgegeben, wenn jemand anderes als der Eigner versucht,
diesen zu entsperren.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
pthread_mutexattr_setkind_np(3-thr) pthread_mutexattr_setkind_np(3-thr)
Verwenden Sie einen rekursiven Mutex niemals zusammen mit Condition-
Variablen, da das für pthreadcondwait() oder
pthreadcondtimedwait() ausgeführte implizite Entsperren möglicher-
weise den Mutex nicht wirklich freigibt. In diesem Fall kann die
Bedingung für das Prädikat von keinem anderen Thread erfüllt werden.
Bei dieser Routine handelt es sich um eine neue Grundfunktion.
RÜCKGABEWERTE
Wenn die Funktion fehlschlägt, kann errno auf einen der folgenden
Werte gesetzt werden:
EINVAL Der durch attr angegebene Wert ist ungültig.
EPERM Der Aufrufer verfügt nicht über die erforderlichen Berechti-
gungen.
ERANGE Einer oder mehrere der angegebenen Parameter hat/haben einen
ungültigen Wert.
SIEHE AUCH
pthreadmutexinit(3-thr), pthreadmutexattrcreate(3-thr),
pthreadmutexattrgetkindnp(3-thr).
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98