X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/c50398ab4cb09658b3b3fff74804d2f26df785e7..4b6190b935dd75d8ddd514a05c7c7343e32c0cdc:/lunaix-os/kernel/ds/mutex.c diff --git a/lunaix-os/kernel/ds/mutex.c b/lunaix-os/kernel/ds/mutex.c new file mode 100644 index 0000000..7bfbf10 --- /dev/null +++ b/lunaix-os/kernel/ds/mutex.c @@ -0,0 +1,24 @@ +#include +#include + +void +mutex_lock(mutex_t* mutex) +{ + sem_wait(&mutex->sem); + mutex->owner = __current->pid; +} + +void +mutex_unlock(mutex_t* mutex) +{ + mutex_unlock_for(mutex, __current->pid); +} + +void +mutex_unlock_for(mutex_t* mutex, pid_t pid) +{ + if (mutex->owner != pid) { + return; + } + sem_post(&mutex->sem); +} \ No newline at end of file