OOStuBS/MPStuBS
|
Behandlung für einen "Killer"-IPI, also eine Nachricht, dass ein Thread beendet werden soll.Nur für MPStuBS notwendig. Mehr ...
#include <assassin.h>
Öffentliche Methoden | |
void | hire () |
"Anwerben" des Assassins Mehr ... | |
bool | prologue () |
Prolog der Unterbrechungsbehandlung. Mehr ... | |
virtual void | epilogue () |
Epilog der Unterbrechungsbehandlung. Mehr ... | |
Öffentliche Methoden geerbt von Gate | |
Gate () | |
Konstruktor. Mehr ... | |
virtual | ~Gate () |
Destruktor. Mehr ... | |
bool | set_queued () |
Setzt atomar ein Flag um zu markieren, dass sich das Objekt gerade in einer Epilog-Warteschlange befindet. Mehr ... | |
void | set_dequeued () |
Setzt das in set_queued() gesetzte Flag zurück. Mehr ... | |
Weitere Geerbte Elemente | |
Öffentliche Attribute geerbt von Gate | |
QueueLink< Gate > | queue_link |
Verkettungszeiger für Epilog Queue. | |
Behandlung für einen "Killer"-IPI, also eine Nachricht, dass ein Thread beendet werden soll.
Nur für MPStuBS notwendig.
Will ein Thread einen anderen Thread mittels Scheduler::kill() beenden, so muss man, falls der zu beendende Thread gerade irgendwo läuft diese CPU benachrichtigen, dass der Thread sterben soll. Die soll durch einen Interprozessorinterrupt (IPI) realisiert werden. Die Klasse Assassin soll nun diesen IPI behandeln und im Epilog prüfen, ob beim aktuell laufenden Thread das Sterbe-Flag gesetzt ist, dann gegebenenfalls den Thread von der Ready-Liste entfernen und eine Threadumschaltung auslösen.
|
virtual |
void Assassin::hire | ( | ) |
|
virtual |
Prolog der Unterbrechungsbehandlung.
Der Prolog muss hier nichts weiter tun als einen Epilog anzufordern.
Implementiert Gate.