Files
ficus/src/kernel/mutex.hpp
Stepan Usatiuk 63af59f5ac Tweak clang-format to not align across empty lines
That should fix insane function declarations
2024-04-14 16:55:50 +02:00

43 lines
708 B
C++

//
// Created by Stepan Usatiuk on 20.08.2023.
//
#ifndef FICUS_MUTEX_H
#define FICUS_MUTEX_H
#include <atomic>
#include <cstddef>
#include <cstdint>
#include "List.hpp"
#include "Spinlock.hpp"
struct Task;
struct TaskListNode;
class Mutex {
public:
Mutex() = default;
void lock();
// void spin_lock();
bool try_lock();
void unlock();
// Same as unlock, but assumes scheduler lock is taken
void unlock_nolock();
bool test();
Task *owner() { return _owner; }
private:
std::atomic<bool> locked = false;
List<Task *> waiters;
Spinlock waiters_lock;
Task *_owner = nullptr;
uint8_t spin_success = 127;
};
#endif //FICUS_MUTEX_H