feat: simple read/write lock implementation
[lunaix-os.git] / 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 (file)
index 0000000..7bfbf10
--- /dev/null
@@ -0,0 +1,24 @@
+#include <lunaix/ds/mutex.h>
+#include <lunaix/process.h>
+
+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