This commit is contained in:
Niklas Gollenstede
2025-10-31 22:37:36 +01:00
commit 174fe17e89
197 changed files with 79558 additions and 0 deletions

22
kernel/sync/semaphore.cc Normal file
View File

@@ -0,0 +1,22 @@
#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++;
}
}