X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/ea77b9c3fc7fb9bf9d7f9604fc187c8049212a2a..270869139db617e29a35bb9ded41087bb702f9ac:/lunaix-os/includes/lunaix/ds/mutex.h diff --git a/lunaix-os/includes/lunaix/ds/mutex.h b/lunaix-os/includes/lunaix/ds/mutex.h index 97101ef..510f1fb 100644 --- a/lunaix-os/includes/lunaix/ds/mutex.h +++ b/lunaix-os/includes/lunaix/ds/mutex.h @@ -1,25 +1,25 @@ #ifndef __LUNAIX_MUTEX_H #define __LUNAIX_MUTEX_H -#include "semaphore.h" #include +#include typedef struct mutex_s { - struct sem_t sem; + atomic_ulong lk; pid_t owner; } mutex_t; static inline void mutex_init(mutex_t* mutex) { - sem_init(&mutex->sem, 1); + mutex->lk = ATOMIC_VAR_INIT(0); } static inline int mutex_on_hold(mutex_t* mutex) { - return !atomic_load(&mutex->sem.counter); + return atomic_load(&mutex->lk); } void @@ -28,6 +28,12 @@ mutex_lock(mutex_t* mutex); void mutex_unlock(mutex_t* mutex); +void +mutex_lock_nested(mutex_t* mutex); + +void +mutex_unlock_nested(mutex_t* mutex); + void mutex_unlock_for(mutex_t* mutex, pid_t pid);