Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger

 << zurück
Linux-UNIX-Programmierung von Jürgen Wolf
Das umfassende Handbuch – 2., aktualisierte und erweiterte Auflage 2006
Buch: Linux-UNIX-Programmierung

Linux-UNIX-Programmierung
1216 S., mit CD, 49,90 Euro
Rheinwerk Computing
ISBN 3-89842-749-8
gp Kapitel A Funktionsreferenz
  gp B.1 ANSI C
  gp B.2 ANSI C99
  gp B.3 Elementare E/A-Funktionen
  gp B.4 Fortgeschrittene Ein-/Ausgabe-Funktionen
  gp B.5 Verzeichnisse
  gp B.6 Attribute von Dateien und Verzeichnissen
  gp B.7 Links
  gp B.8 Prozess und Prozessverwaltungsfunktionen
  gp B.9 Signale – Das neue Signalkonzept
  gp B.10 Interprozesskommunikationen
  gp B.11 Sys-V-Interprozesskommnunikationen
  gp B.12 Threadprogrammierung
  gp B.13 Netzwerkprogrammierung
  gp B.14 MySQL C-API
  gp B.15 PostgreSQL C-API
  gp B.16 Weitere Funktionsreferenzen auf der Buch-CD


Rheinwerk Computing

B.12 Threadprogrammierung  downtop

Anhand des Präfix der Pthread-Funktionen lassen sich diese ordentlich in eine Gruppe einsortieren. Hier ein schneller Überblick dazu.


Tabelle B.60    Verschieden Präfixe von Threadfunktionen

Präfix Gruppe
pthread_ Threads selbst mit verschiedenen Unterfunktionen
pthread_attr_ Thread-Eigenschaften
pthread_mutex_ Mutexe
pthread_mutexattr_ Mutex-Eigenschaften
pthread_cond_ Condition Variablen
pthread_condattr_ Eigenschaften von Condition Variablen
pthread_key_ spezifische Thread-Daten-Schlüssel

Insgesamt beinhaltet die Pthread-API über 60 Funktionen und zum Übersetzen müssen Sie die Headerdatei <pthread. h.> einbinden und die Bibliothek (-lpthread) hinzulinken.


Rheinwerk Computing

B.12.1 Thread-Verwaltung  downtop


Tabelle B.61    Funktionen zur gewöhnlichen Thread-Verwaltung

Syntax Bedeutung
int pthread_create( pthread_t * thread, pthread_attr_t * attr, void * (*start_routine) (void *), void * arg); Thread erzeugen
void pthread_exit(void *retval); Thread beenden
int pthread_join( pthread_t th, void **thread_return); Auf die Beendigung von Threads warten
pthread_t pthread_self(void); Threads identifizieren
int pthread_equal( pthread_t thread1, pthread_t thread2); Threads vergleichen
int pthread_detach( pthread_t th); Einen Thread von den anderen Absondern in dem dieser anhand der Leistung und Performance ein wenig optimiert wird. Dies wird erreicht, indem dieser Thread bei Beendigung sofort terminiert und freigegeben wird. Allerdings kann dieser Thread nicht mehr mit pthread_join() synchronisiert werden.


Rheinwerk Computing

B.12.2 Attribute von Threads und das Scheduling erfragen  downtop


Tabelle B.62    Attribute und Scheduling von Threads ermitteln

Syntax Bedeutung
int pthread_attr_init( pthread_attr_t *attr); Attributvariable initialisieren
int pthread_attr_getdetachstate( const pthread_attr_t *attr, int *detachstate); Abfragen ob der Thread PTHREAD_CREATE_DETACHED ist, also b. Beendigung sofort freigegeben wird oder ob PTHREAD_CREATE_JOINABLE (Standard) gesetzt ist, womit sich der Thread besser synchronisieren lässt.
int pthread_attr_getschedpolicy( const pthread_attr_t *attr, int *policy ); Die Prioritäten eines Threads abfragen. Mögliche Werte: SCHED_OTHER (normal, keine Echtzeit), SCHED_FIFO (hoch, Echtzeit) und SCHED_RR (hoch, Echtzeit Round-Robin)
int pthread_attr_getinheritsched( const pthread_attr_t *attr, int *inherit); Werden die Scheduling-Eigenschaften des Vaterthreads, beim Erzeugen eines neuen Threads übernommen (PTHREAD_INHERIT_SCHED) oder nicht (PTHREAD_EXPLICIT_SCHED).
int pthread_attr_destroy( pthread_attr_t *attr); Attributvariable wieder freigeben


Rheinwerk Computing

B.12.3 Attribute und das Scheduling von Threads setzen  downtop


Tabelle B.63    Attribute und Scheduling von Threads setzen

Syntax Bedeutung
int pthread_attr_init( pthread_attr_t *attr); Attributvariable initialisieren
int pthread_attr_setdetachstate( pthread_attr_t *attr, int detachstate); Setzen der Eigenschaft PTHREAD_CREATE_DETACHED oder PTHREAD_CREATE_JOINABLE (Standard) für einen Thread.
int pthread_attr_setschedpolicy( pthread_attr_t *attr, int policy); Prioritäten für einen Thread setzen. Mögliche Werte: SCHED_OTHER (normal, keine Echtzeit), SCHED_FIFO (hoch, Echtzeit) und SCHED_RR (hoch, Echtzeit Round-Robin)
int pthread_attr_setinheritsched( pthread_attr_t *attr, int inherit); Einstellen, ob, die Scheduling-Eigenschaften vom Vaterthread an den Kindthread vererbt werden soll (PTHREAD_INHERIT_SCHED) oder nicht (PTHREAD_EXPLICIT_SCHED).
int pthread_attr_destroy( pthread_attr_t *attr); Attributvariable wieder freigeben


Rheinwerk Computing

B.12.4 Mutex-Variablen  downtop


Tabelle B.64    Funktionen zum Arbeiten mit Mutex

Syntax Bedeutung
int pthread_mutex_lock( pthread_mutex_t *mutex); Mutex anlegen (initialisieren)
int pthread_mutex_lock( pthread_mutex_t *mutex); Mutex sperren (blockiert ggf. bis Mutex frei wird – falls gesperrt)
int pthread_mutex_trylock( pthread_mutex_t *mutex); Mutex sperren (ohne blockieren – ist Mutex nicht frei, wird Fehlercode EBUSY zurückgegeben)
int pthread_mutex_unlock( pthread_mutex_t *mutex); gesperrten Mutex wieder freigeben
int pthread_mutex_destroy( pthread_mutex_t *mutex); Mutex löschen (freigeben)


Rheinwerk Computing

B.12.5 Attribute von Mutexe  downtop


Tabelle B.65    Attribute für Mutexe setzen oder abfragen

Syntax Bedeutung
int pthread_mutexattr_init( pthread_mutexattr_t *attr); Attributvariable für Mutexe initialisieren
int pthread_mutexattr_setkind_np( pthread_mutexattr_t *attr, int kind ); Attribute für Mutex setzen
int pthread_mutexattr_getkind_np( pthread_mutexattr_t *attr, int *kind ); Attribute für Mutex abfragen
int pthread_mutexattr_destroy( pthread_mutexattr_t *attr); Attributvariable für Mutex wieder freigeben


Hinweis   Die Funktionen pthread_mutexattr_setkind_np() und pthread_mutexattr_getkind_np() sind keine portablen POSIX-Funktionen. Das gilt auch für die drei Attribute PTHREAD_MUTEX_FAST_NP, PTHREAD_MUTEX_ERRORCHECK_NP und PTHREAD_MUTEX_RECURSIVE_NP, von denen Linux offiziell nur PTHREAD_MUTEX_FAST_NP untersützt – obwohl auch diese Konstanten nicht portable sind (Endung _NP).


Alternativ gibt es noch die Funktionen

int pthread_mutexattr_settype (
   pthread_mutexattr_t *attr, int kind );
int pthread_mutexattr_gettype (
   const pthread_mutexattr_t *attr, int *kind );

welche zwar keine _np-Endung besitzten. Wobei sich dies allerdings wieder aufhebt, weil die Attribute (symbolische Konstanten) wieder dieselben möglichen sind, wie die schon eben erwähnten _NP-Konstanten.


Rheinwerk Computing

B.12.6 Condition Variablen  downtop


Tabelle B.66    Funktionen für Condition Variablen

Syntax Bedeutung
int pthread_cond_init( pthread_cond_t *cond, pthread_condattr_t *cond_attr); Initialisieren einer Condition Variable
int pthread_cond_wait( pthread_cond_t *cond, pthread_mutex_t *mutex); Wartet auf die Condition Variable
int pthread_cond_timewait( pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime); Wartet eine bestimmte Zeit auf die Condition Variable
int pthread_cond_signal( pthread_cond_t *cond); Die Funktion weckt einen wartenden Thread auf. Bei mehreren wartenden Threads, liegt dies leider nicht in Ihrer Hand.
int pthread_cond_broadcast( pthread_cond_t *cond); Die Funktion weckt alle wartende Threads auf.
int pthread_cond_destroy( pthread_cond_t *cond); Freigeben einer Condition Variable


Rheinwerk Computing

B.12.7 Threads beenden  toptop


Tabelle B.67    Erweiterte Möglichkeiten, einen Thread zu beenden

Syntax Beschreibung
int pthread_cancel( pthread_t thread); Thread mit der ID thread beenden
int pthread_setcancelstate( int state, int *oldstate); Hiermit lässt sich einstellen, ob sich der Thread mit pthread_cancel() aus einem zweiten Thread beenden lässt (Standardeinstellung (state=PTHREAD_CANCEL_ENABLE)) oder nicht (state=PTHREAD_CANCEL_DISABLE)
int pthread_setcanceltype( int type, int *oldtype); Soll ein Thread sofort nach einem Aufruf von pthread_cancel() beendet werden muss hier für type PTHREAD_CANCEL_ASYNCHRONOUS angegeben werden. Ansonsten mit PTHREAD_CANCEL_DEFERRED (Standardeinstellung) läuft der Thread noch bis zum Ende bzw. nächsten Abbruchpunkt weiter.

 << zurück
  
  Zum Rheinwerk-Shop
Neuauflage: Linux-UNIX-Programmierung
Neuauflage:
Linux-UNIX-
Programmierung

bestellen
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchtipps
Zum Rheinwerk-Shop: Linux-Server






 Linux-Server


Zum Rheinwerk-Shop: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Rheinwerk-Shop: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Rheinwerk-Shop: Shell-Programmierung






 Shell-
 Programmierung


Zum Rheinwerk-Shop: Linux Handbuch






 Linux Handbuch


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
Info





Copyright © Rheinwerk Verlag GmbH 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern