X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/48b4a227035048fdebcd32532deb7a857c6199ac..3bdd71c82e64428a03650bf3d00150020e217c53:/lunaix-os/kernel/ds/semaphore.c?ds=sidebyside diff --git a/lunaix-os/kernel/ds/semaphore.c b/lunaix-os/kernel/ds/semaphore.c index 7b059a6..b4d0674 100644 --- a/lunaix-os/kernel/ds/semaphore.c +++ b/lunaix-os/kernel/ds/semaphore.c @@ -1,18 +1,25 @@ #include -#include +#include -void sem_init(struct sem_t *sem, unsigned int initial) { +void +sem_init(struct sem_t* sem, unsigned int initial) +{ sem->counter = ATOMIC_VAR_INIT(initial); } -void sem_wait(struct sem_t *sem) { +void +sem_wait(struct sem_t* sem) +{ while (!atomic_load(&sem->counter)) { - schedule(); + // FIXME: better thing like wait queue + preempt_current(); } atomic_fetch_sub(&sem->counter, 1); } -void sem_post(struct sem_t *sem) { +void +sem_post(struct sem_t* sem) +{ atomic_fetch_add(&sem->counter, 1); // TODO: wake up a thread } \ No newline at end of file