1 #include <lunaix/ds/mutex.h>
2 #include <lunaix/process.h>
3 #include <lunaix/sched.h>
6 mutex_lock(mutex_t* mutex)
8 if (atomic_load(&mutex->lk) && mutex->owner == __current->pid) {
9 atomic_fetch_add(&mutex->lk, 1);
13 while (atomic_load(&mutex->lk)) {
17 atomic_fetch_add(&mutex->lk, 1);
18 mutex->owner = __current->pid;
22 mutex_unlock(mutex_t* mutex)
24 mutex_unlock_for(mutex, __current->pid);
28 mutex_unlock_for(mutex_t* mutex, pid_t pid)
30 if (mutex->owner != pid || !atomic_load(&mutex->lk)) {
33 atomic_fetch_sub(&mutex->lk, 1);