Luna/kernel/src/lib/Mutex.h
apio 4af337e92d
Some checks are pending
continuous-integration/drone/push Build is running
kernel: Improve the mutex system
2023-09-20 07:05:33 +02:00

45 lines
756 B
C++

#pragma once
#include "thread/Thread.h"
#include <luna/CircularQueue.h>
#include <luna/Spinlock.h>
class Mutex
{
public:
void lock();
void unlock();
bool try_lock();
private:
CircularQueue<Thread*, 32> m_blocked_threads;
Spinlock m_spinlock;
Atomic<pid_t> m_thread;
};
class ScopedMutexLock
{
public:
ScopedMutexLock(Mutex& lock) : m_lock(lock)
{
m_lock.lock();
}
~ScopedMutexLock()
{
if (!m_taken_over) m_lock.unlock();
}
ScopedMutexLock(const ScopedMutexLock&) = delete;
ScopedMutexLock(ScopedMutexLock&&) = delete;
Mutex& take_over()
{
m_taken_over = true;
return m_lock;
}
private:
Mutex& m_lock;
bool m_taken_over { false };
};