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 109<br />

Ready: Der Thread ist im Besitz aller programmspezifischen Betriebs<strong>mit</strong>tel,<br />

ist bereit zu laufen <strong>und</strong> wartet lediglich auf die Zuteilung von CPU-Zeit.<br />

Wird ein neuer Thread erstellt, so befindet sich dieser zu Beginn automatisch<br />

im Ready-Zustand. Abhängig von der angewandten Scheduling-<br />

Strategie kann der Thread sofort in den Running-Zusatnd wechseln, oder<br />

auch noch eine ganze Weile im Ready-Zustand verweilen. Insbesondere<br />

legt der Standard nicht fest, ob der Aufruf von pthread_create() zurückkehrt,<br />

bevor oder nachdem der neue Thread den Running-Zusatnd erreicht<br />

hat. Es existiert also keine Synchronisation zwischen der Rückkehr aus<br />

pthread_create() <strong>und</strong> dem tatsächlichen Start des neuen <strong>Threads</strong>.<br />

Ein bereits gestarteter Thread geht in den Ready-Zustand über, wenn ihm<br />

vom System die CPU-Zeit entzogen wurde, oder er gerade den Blocked-<br />

Zusatnd verlassen hat.<br />

Running: Der Thread läuft gerade. Auf Einprozessorsystemen kann immer<br />

nur ein Thread gleichzeitig in diesem Zustand sein, während auf Multiprozessorsystemen<br />

natürlich zu einem Zeitpunkt mehrere <strong>Threads</strong> gleichzeitig<br />

im Running-Zusatnd sein können.<br />

Wird einem Thread vom System CPU-Zeit zugeteilt, so geht er aus dem<br />

Ready-Zustand in den Running-Zusatnd über. In den meisten Fällen bedeutet<br />

dies, daß ein anderer Thread gleichzeitig den Running-Zustand<br />

verlassen hat. Auf einem Multiprozessorsystem kann ein neuer Thread<br />

natürlich auch dadurch zum Zug kommen, daß ein bislang ungenutzter<br />

Prozessor <strong>mit</strong> diesem Thread belegt wird. Bei einem Threadwechsel wird<br />

vom System gleichzeitig der Kontext der <strong>Threads</strong> (Befehlszähler, Registersatz,<br />

Stack) ausgetauscht.<br />

Ein Thread bleibt solange im Running-Zusatnd, bis ihm entweder vom System<br />

die CPU-Zeit entzogen wird, z. B. weil entsprechend der Scheduling-<br />

Strategie seine Zeitscheibe abgelaufen ist, oder der Thread auf ein programmspezifisches<br />

Betriebs<strong>mit</strong>tel, wie z. B. einen Mutex, warten muß. Im<br />

ersten Fall wechselt der Thread zurück in den Ready-Zustand, im zweiten<br />

Fall wechselt er in den Blocked-Zustand.<br />

Blocked: Der Thread ist nicht bereit zu laufen, da er auf ein programmspezifisches<br />

Betriebs<strong>mit</strong>tel wartet. Dies ist z. B. dann der Fall, wenn der<br />

Thread auf das Ende eines anderen <strong>Threads</strong>, einen Mutex oder eine Bedingungsvariable<br />

wartet (siehe Abschnitt 3.2), wenn er auf den Abschluß<br />

einer Ein-/Ausgabe-Operation oder das Einteffen eines Signals wartet,<br />

oder wenn er sich einfach nur <strong>mit</strong> sleep() schlafen gelegt hat.<br />

Sobald dem Thread vom System das erwartete Betriebs<strong>mit</strong>tel zugewiesen<br />

wurde, wechselt der Thread zurück in den Ready-Zustand <strong>und</strong> wird wieder<br />

ausgeführt, sobald ihm erneut CPU-Zeit zugewiesen werden kann.<br />

Terminated: Der Thread ist aus seiner Startfunktion zurückgekehrt, hat sich<br />

<strong>mit</strong> pthread_exit() beendet oder wurde anderweitig abgebrochen (<strong>und</strong><br />

hat bereits alle Cleanup-Funktionen durchlaufen).

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!