pthread_cond_init(3-thr) pthread_cond_init(3-thr)
NAME
pthreadcondinit - Eine Condition-Variable erstellen
SYNTAX
#include <pthread.h>
int pthreadcondinit(
pthreadcondt *cond,
pthreadcondattrt attr);
PARAMETER
cond Die Condition-Variable, die erstellt wird.
attr Das Objekt für Attribute von Condition-Variablen, das die
Merkmale der erstellten Condition-Variablen definiert. Wenn
Sie pthreadcondattrdefault angeben, werden die Standardat-
tribute verwendet.
BESCHREIBUNG
Die Routine pthreadcondinit() erstellt und initialisiert eine
Condition-Variable. Eine Condition-Variable ist ein Synchronisations-
objekt, das zusammen mit einem Mutex verwendet wird. Ein solcher Mutex
steuert den Zugriff auf gemeinsam genutzte Daten. Mit Hilfe einer
Condition-Variablen können Threads darauf warten, daß diese Daten
einen definierten Status annehmen. Der Status wird durch einen boole-
schen Ausdruck, dem sogenannten Prädikat, definiert.
Durch Signalisierung oder Broadcasting einer Condition-Variablen wird
angezeigt, daß jetzt möglicherweise ein Prädikat zutrifft. Die Broad-
cast-Operation gibt an, daß alle wartenden Threads die Ausführung wie-
deraufnehmen und das Prädikat neu bewerten müssen. Die Signal-Opera-
tion wird verwendet, wenn einer der wartenden Threads fortgesetzt wer-
den kann.
Wenn ein Thread, der einen Mutex hält, feststellt, daß die gemeinsam
genutzten Daten nicht den richtigen Status für eine Fortsetzung der
Verarbeitung aufweisen (das heißt, das zugehörige Prädikat trifft
nicht zu), wartet er auf eine Condition-Variable mit dem gewünschten
Status. Durch das Warten auf die Condition-Variable wird der Mutex
automatisch freigegeben, so daß andere Threads die gemeinsam genutzten
Daten verändern oder prüfen können. Wenn ein Thread den Status der
gemeinsam genutzten Daten ändert, so daß jetzt möglicherweise ein Prä-
dikat zutrifft, wird eine Signal- oder Broadcast-Operation zur ent-
sprechenden Condition-Variablen ausgegeben, damit die Ausführung der
Threads, die auf dieses Prädikat warten, fortgesetzt werden kann.
Dabei ist es wichtig, daß alle Threads, die auf eine bestimmte
Condition-Variable warten, zu jederzeit denselben Mutex halten.
Andernfalls ist das Verhalten beim Warten unvorhersehbar (eine Imple-
mentierung kann den Mutex zur Steuerung des internen Zugriffs auf das
Objekt für die Condition-Variablen verwenden). Allerdings ist es
zulässig, daß ein Client Condition-Variablen und Mutexe speichert und
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
pthread_cond_init(3-thr) pthread_cond_init(3-thr)
sie später in anderen Kombinationen erneut einsetzt. Der Client muß
sicherstellen, daß keine Threads die Condition-Variable mit dem alten
Mutex verwenden. Einem einzelnen Mutex kann eine beliebige Anzahl von
Condition-Variablen zugeordnet sein, wobei jede für ein anderes Prädi-
kat der gemeinsam genutzten Daten steht, die durch diesen Mutex
geschützt sind.
Condition-Variablen gehören nicht zu einem bestimmten Thread. Die
Belegung eines zugehörigen Speichers wird nicht automatisch aufgeho-
ben, wenn der erstellende Thread beendet wird.
RÜCKGABEWERTE
Wenn die Funktion fehlschlägt, kann errno auf einen der folgenden
Werte gesetzt werden:
EAGAIN Das System verfügt nicht über die für die Initialisierung
einer weiteren Condition-Variablen erforderlichen Ressour-
cen.
EINVAL Ungültiges Attributobjekt.
ENOMEM Der Speicher reicht für die Initialisierung der Condition-
Variablen nicht aus.
SIEHE AUCH
pthreadcondbroadcast(3-thr), pthreadconddestroy(3-thr),
pthreadcondsignal(3-thr), pthreadcondtimedwait(3-thr),
pthreadcondwait(3-thr).
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98