2023-02-01 01:51:25 +02:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <BAN/NoCopyMove.h>
|
|
|
|
|
2023-03-24 01:32:35 +02:00
|
|
|
#include <sys/types.h>
|
|
|
|
|
2023-02-01 01:51:25 +02:00
|
|
|
namespace Kernel
|
|
|
|
{
|
|
|
|
|
|
|
|
class SpinLock
|
|
|
|
{
|
|
|
|
BAN_NON_COPYABLE(SpinLock);
|
|
|
|
BAN_NON_MOVABLE(SpinLock);
|
|
|
|
|
|
|
|
public:
|
|
|
|
SpinLock() = default;
|
|
|
|
void lock();
|
|
|
|
void unlock();
|
2023-02-02 15:49:30 +02:00
|
|
|
bool is_locked() const;
|
|
|
|
|
2023-02-01 01:51:25 +02:00
|
|
|
private:
|
2023-07-27 18:36:44 +03:00
|
|
|
volatile pid_t m_locker = -1;
|
2023-02-01 01:51:25 +02:00
|
|
|
};
|
|
|
|
|
2023-03-24 01:32:35 +02:00
|
|
|
class RecursiveSpinLock
|
|
|
|
{
|
|
|
|
BAN_NON_COPYABLE(RecursiveSpinLock);
|
|
|
|
BAN_NON_MOVABLE(RecursiveSpinLock);
|
|
|
|
|
|
|
|
public:
|
|
|
|
RecursiveSpinLock() = default;
|
|
|
|
void lock();
|
|
|
|
void unlock();
|
|
|
|
bool is_locked() const;
|
|
|
|
|
|
|
|
private:
|
2023-05-29 19:38:09 +03:00
|
|
|
pid_t m_locker = -1;
|
2023-03-24 01:32:35 +02:00
|
|
|
uint32_t m_lock_depth = 0;
|
|
|
|
SpinLock m_lock;
|
|
|
|
};
|
|
|
|
|
2023-02-01 01:51:25 +02:00
|
|
|
}
|