mirror of
https://github.com/subhobhai943/SUB-OS.git
synced 2026-10-25 16:52:29 +00:00
27 lines
534 B
C
27 lines
534 B
C
#include <kernel/sync.h>
|
|
#include <kernel/sched.h>
|
|
|
|
void sem_init(semaphore_t* sem, int value) {
|
|
spinlock_init(&sem->lock);
|
|
sem->count = value;
|
|
}
|
|
|
|
void sem_wait(semaphore_t* sem) {
|
|
while (1) {
|
|
spin_lock(&sem->lock);
|
|
if (sem->count > 0) {
|
|
sem->count--;
|
|
spin_unlock(&sem->lock);
|
|
return;
|
|
}
|
|
spin_unlock(&sem->lock);
|
|
sched_yield();
|
|
}
|
|
}
|
|
|
|
void sem_post(semaphore_t* sem) {
|
|
spin_lock(&sem->lock);
|
|
sem->count++;
|
|
spin_unlock(&sem->lock);
|
|
}
|