05.11.2013 Aufrufe

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

3.1 Gr<strong>und</strong>lagen 105<br />

t2 den selben Thread, so liefert pthread_equal() einen Rückgabewert ungleich<br />

0. Handelt es sich um zwei verschiedene Pthreads, dann wird der Wert<br />

0 zurückgegeben. Sind t1 oder t2 keine gültigen Thread-IDs, so ist das Verhalten<br />

von pthread_equal() explizit unspezifiziert.<br />

#include<br />

<br />

int pthread_create( pthread_t *thread ,<br />

const pthread_attr_t *attr,<br />

void *(*start_routine)( void * ),<br />

void *arg );<br />

pthread_t pthread_self( void );<br />

int pthread_equal( pthread_t t1, pthread_t t2 );<br />

int pthread_join( pthread_t thread ,<br />

void **value_ptr );<br />

int pthread_detach( pthread_t thread );<br />

void pthread_exit( void *value_ptr );<br />

Kehrt ein Thread aus seiner Startfunktion zurück, so beendet sich der Thread<br />

dadurch gleichzeitig. Da der Thread asynchron zum laufenden Prozeß bzw.<br />

zu allen anderen <strong>Threads</strong> in diesem Prozeß gestartet wurde, gibt es allerdings<br />

keine aufrufende Umgebung, die den Rückgabewert des <strong>Threads</strong>, einen Zeiger<br />

vom Typ void *, umgehend auswerten könnte. Aus diesem Gr<strong>und</strong> wird der<br />

Rückgabewert des <strong>Threads</strong> vom System zur späteren Abholung hinterlegt.<br />

Ein Rücksprung aus der Startfunktion entspricht da<strong>mit</strong> einem impliziten<br />

Aufruf der Funktion pthread_exit(), welche einen Thread an einer beliebigen<br />

Stelle, also z. B. auch tief innerhalb einer rekursiv aufgerufenen Unterfunktion,<br />

beenden kann. Die Funktion bildet da<strong>mit</strong> das Pthreads-Äquivalent<br />

zur exit()-Funktion von Prozessen. Sie beendet allerdings lediglich<br />

den aufrufenden Thread <strong>und</strong> nicht, wie ihr Pendant, den gesamten Prozeß.<br />

pthread_exit() erwartet als einziges Argument einen void-Zeiger, welcher,<br />

analog zur Rückkehr aus der Startfunktion, vom System als Rückgabewert<br />

des beendeten <strong>Threads</strong> hinterlegt wird. Wird der Thread abgebrochen, so ist<br />

als Rückgabewert die Konstante PTHREAD_CANCELED hinterlegt.<br />

Die pthread_join()-Funktion dient nun dazu, auf das Ende eines anderen<br />

<strong>Threads</strong> zu warten <strong>und</strong> gleichzeitig den Rückgabewert des beendeten <strong>Threads</strong><br />

abzufragen. Ist der <strong>mit</strong>tels thread referenzierte Thread bereits beendet, so<br />

kehrt pthread_join() un<strong>mit</strong>telbar zurück. Andernfalls blockiert der aufrufende<br />

Thread solange, bis der Zielthread, auf den gewartet werden soll, beendet<br />

ist. Sofern beim Aufruf von pthread_join() kein Nullzeiger übergeben<br />

wurde, wird in beiden Fällen der Rückgabewert des beendeten <strong>Threads</strong> im<br />

Parameter value_ptr zurückgeliefert. War der Aufruf erfolgreich, so liefert<br />

pthread_join() den Statuswert 0 zurück, andernfalls gibt der Rückgabewert<br />

Aufschluß über die Fehlerursache.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!