#include "./semaphore.h" #include "../interrupt/guard.h" #include "../thread/thread.h" void Semaphore::p(Vault &vault) { if (counter == 0) { waiting.enqueue(*vault.scheduler.active()); vault.scheduler.resume(false); } else { counter--; } } void Semaphore::v(Vault &vault) { Thread *customer = waiting.dequeue(); if (customer != nullptr) { vault.scheduler.ready(customer); } else { counter++; } }