Deadlock und Race Condition
Teil 3: Programmieren für die Multi-Core-CPU
Der Ablauf im Einzelnen
Das Applikationsprogramm macht einen Aufruf an den Thread Pool und übergibt die Methode an den Pool. Danach wird das Applikationsprogramm weiter ausgeführt. Es handelt sich somit um einen asynchronen Aufruf des Thread Pool. Der Thread im Thread Pool läuft unabhängig und getrennt vom Applikationscode.
Nach der Beendigung der Arbeit signalisiert der Thread im Pool das Ende an den Aufrufer im Applikations-Thread. Dies passiert durch den WaitCallback Delegate.
Die Methode WaitCallback verweist ihrerseits auf eine Methode, die als Parameter ein System.Object
beinhaltet. Dieser Code wird nach der Arbeit des asynchronen Threads aufgerufen.
Der folgende Codeabschnitt demonstriert die Hinterlegung von Methoden zur Ausführung durch den Worker-Pool. Die CallBack-Methode computeOne
wird nach Beendigung der Threads im Pool aufgerufen:
class Program {
static void Compute(int[] list) {
WaitCallback workItem = new WaitCallback(computeOne);
foreach (int x in list) {
ThreadPool.QueueUserWorkItem(workItem, x);
}
Console.WriteLine("All tasks queued in Pool now");
}
static void computeOne (object state) {
int i = (int)state;
// do necessary computation on i
}
...
}