Deadlock und Race Condition

Teil 3: Programmieren für die Multi-Core-CPU

Die Thread Verwaltung in .Net

Das .Net-Framework selbst hat keine Thread-Verwaltung, sondern stützt sich hierbei auf die Funktionen des Betriebssystems. Die Windows-Betriebssysteme setzen dazu einen Scheduler ein. Dessen Aufgabe ist die Zuweisung und Verwaltung der Threads an die CPUs.

Auf einem Rechnersystem mit nur einer Single-Core-CPU erfolgt die Verteilung im Time-Slicing-Verfahren. Dabei erfolgt die Zuweisung der CPU an die vielen Tasks nacheinander und immer für eine kurze Zeitspanne (die Zeitscheibe). Unter Windows XP liegen diese Zeitscheiben meist im Millisekunden-Bereich. Letztendlich kann aber natürlich immer nur ein Task zur Zeit aktiv sein.

In einer Multi-Core- oder Multiprozessor-Umgebung allerdings erfolgt die Zuweisung der Tasks an die Kerne in einer etwas komplexeren Variante. Die Grundlage dabei stellt auch das Zeitscheibenverfahren dar. Hinzu kommen aber weitere Logiken, die eine echte Parallelverarbeitung ermöglichen.

Zwei Arten des Multithreading in .NET

Die Applikationen werden zur Laufzeit als managed Threads in .Net abgebildet. Managed Threads können in zwei Ausprägungen auftreten. Sie sind entweder vom Typ Vordergrund-Thread (Foreground Thread) oder Hintergrund-Thread (Background Thread). Eine Applikation in einer durch .Net gemanagten Umgebung benötigt mindestens einen Foreground Thread. Mit dessen Ende, endet auch die Applikation.

Background Threads wiederum können eine Applikation nicht am Leben halten. Wird die Applikation beendet, so werden auch die Background Threads gelöscht. Standardmäßig werden Threads als Vordergrund-Thread erzeugt. Die Property Thread.IsBackground liefert Auskunft darüber, um welchen Thread-Typ es sich handelt.

Generell können .Net-Applikationen auf zwei Arten parallelisiert werden: entweder Sie erzeugen die Threads explizit durch die Programmlogik oder durch lassen das Framework die Threads implizit erzeugen. In den folgenden Erläuterungen werden die Techniken der .Net-Programmierung und Multithreading weiter detailliert.