1
Files
lecture-operating-system-de…/c_os/kernel/threads/Dispatch.cc
2022-06-27 22:50:11 +02:00

47 lines
2.7 KiB
C++

/*****************************************************************************
* *
* D I S P A T C H E R *
* *
*---------------------------------------------------------------------------*
* Beschreibung: Implementierung des Dispatchers. *
* Der Dispatcher verwaltet den 'active'-Pointer, der den *
* jeweils aktiven Thread angibt. Mit 'start()' wird der *
* 'active' Pointer initialisiert und der erste Thread ge- *
* startet, alle weiteren Kontextwechsel werden mit *
* 'dispatch()' ausgeloest. 'get_active()' liefert den *
* 'active' Pointer zurueck. *
* *
* Autor: Olaf Spinczyk, TU Dortmund *
*****************************************************************************/
#include "kernel/threads/Dispatch.h"
/*****************************************************************************
* Methode: Dispatcher::start *
*---------------------------------------------------------------------------*
* Beschreibung: Thread starten. *
* *
* Parameter: *
* first Zu startender Thread. *
*****************************************************************************/
void Dispatcher::start(Thread& first) {
if (!active) {
active = &first;
active->start();
}
}
/*****************************************************************************
* Methode: Dispatcher::dispatch *
*---------------------------------------------------------------------------*
* Beschreibung: Auf einen gegebenen Thread wechseln. *
* *
* Parameter: *
* next Thread der die CPU erhalten soll. *
*****************************************************************************/
void Dispatcher::dispatch(Thread& next) {
Thread* current = active;
active = &next;
current->switchTo(next);
}