Öffentliche Methoden |
| Scheduler () |
| Konstruktor.
|
void | schedule () |
| Starten des Schedulings.
|
void | ready (Thread *that) |
| Anmelden eines Threads zum Scheduling.
|
void | exit () |
| Selbstbeenden des aktuellen Threads.
|
void | kill (Thread *that) |
| Beenden eines beliebigen Threads.
|
void | resume () |
| Auslösen eines Threadwechsels.
|
bool | isEmpty () |
void | set_idle_thread (int cpuid, Thread *thread) |
| Setzt einen dedizierten Idle-Thread für die entsprechende CPU.
|
void | block (Waitingroom *waitingroom) |
| Mit dieser Methode kann sich der laufende Thread selbst blockieren.
|
void | wakeup (Thread *customer) |
| Mit dieser Methode kann ein schlafender Thread geweckt werden.
|
| Dispatcher () |
| Konstruktor.
|
Thread * | active () |
| Hiermit kann abgefragt werden, welche Koroutine gerade im Besitz des aktuellen Prozessors ist.
|
void | go (Thread *first) |
| Mit dieser Methode wird die Koroutine first im Life-Pointer des aktuellen Prozessores vermerkt und gestartet.
|
void | dispatch (Thread *next) |
| Diese Methode setzt den Life-Pointer des aktuellen Prozessors auf next und führt einen Koroutinenwechsel vom alten zum neuen Life-Pointer durch.
|
Implementierung des Schedulers.
Der Scheduler verwaltet die Ready-Liste (ein privates Queue Objekt der Klasse), also die Liste der lauffähigen Threads. Die Liste wird von vorne nach hinten abgearbeitet. Dabei werden Threads, die neu im System sind oder den Prozessor abgeben, stets an das Ende der Liste angefügt.
void Scheduler::kill |
( |
Thread * |
that | ) |
|
Beenden eines beliebigen Threads.
Mit dieser Methode kann ein Thread einen anderen (that) beenden. In OOStuBS genügt es einfach den Thread that von der Ready-Liste zu entfernen. Er wird somit nie wieder vom Prozessor ausgeführt werden. In MPStuBS ist die Implementierung etwas kniffliger, da der Thread that auch während der Ausführung von kill auf anderen Prozessoren laufen kann. Wird that nicht in der Ready-Liste gefunden, so muss bei ihm vermerkt werden, dass der Thread beendet werden soll. Dies muss in resume überprüft werden, bevor ein Thread wieder in die Ready-Liste eingetragen wird.
- Parameter
-
that | Thread, der beendet werden soll. |