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.

Ablauf: Die Applikation übergibt die auszuführende Methode an den Thread Pool und macht dann weiter.
Ablauf: Die Applikation übergibt die auszuführende Methode an den Thread Pool und macht dann weiter.

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

}

...

}