1#pragma once
2
3#include "basis/seadTypes.h"
4#include "thread/seadAtomic.h"
5
6namespace sead
7{
8class Thread;
9
10class SpinLock
11{
12public:
13 SpinLock();
14 ~SpinLock();
15
16 SpinLock(const SpinLock&) = delete;
17 SpinLock& operator=(const SpinLock&) = delete;
18
19 void lock();
20 bool tryLock();
21 void unlock();
22
23 bool try_lock() { return tryLock(); }
24
25private:
26 Atomic<Thread*> mOwnerThread;
27 u32 mCount = 0;
28};
29} // namespace sead
30