#include "./semaphore.h" #include "../interrupt/guard.h" #include "../thread/scheduler.h" uint8_t counter; Queue waiting; Semaphore::Semaphore(unsigned c) { counter=c; } void Semaphore::p(Vault &vault) { //resource is frei, läuft direkt weiter if (vault.counter > 0) vault.counter--; //else /// thread block, zu aktueller queue hinzufügen und // vault.sch.block(this); } //release void Semaphore::v(Vault &vault) { //Thread* first = waiting.dequeue(); //if (first != nullptr) // void Scheduler::wakeup(first); //else vault.counter++; }