summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/k_spin_lock.h
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2021-02-09 03:02:36 +0100
committerbunnei <bunneidev@gmail.com>2021-02-19 01:16:24 +0100
commit6da91da08e54d02a4087eaddcbe192bd53eeaa9f (patch)
treea78c199089f4589bed446a9994eba216e0622e0c /src/core/hle/kernel/k_spin_lock.h
parentcore: memory: Add templated GetPointer methods. (diff)
downloadyuzu-6da91da08e54d02a4087eaddcbe192bd53eeaa9f.tar
yuzu-6da91da08e54d02a4087eaddcbe192bd53eeaa9f.tar.gz
yuzu-6da91da08e54d02a4087eaddcbe192bd53eeaa9f.tar.bz2
yuzu-6da91da08e54d02a4087eaddcbe192bd53eeaa9f.tar.lz
yuzu-6da91da08e54d02a4087eaddcbe192bd53eeaa9f.tar.xz
yuzu-6da91da08e54d02a4087eaddcbe192bd53eeaa9f.tar.zst
yuzu-6da91da08e54d02a4087eaddcbe192bd53eeaa9f.zip
Diffstat (limited to '')
-rw-r--r--src/core/hle/kernel/k_spin_lock.h33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/core/hle/kernel/k_spin_lock.h b/src/core/hle/kernel/k_spin_lock.h
new file mode 100644
index 000000000..12c4b2e88
--- /dev/null
+++ b/src/core/hle/kernel/k_spin_lock.h
@@ -0,0 +1,33 @@
+// Copyright 2021 yuzu Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include <atomic>
+
+#include "core/hle/kernel/k_scoped_lock.h"
+
+namespace Kernel {
+
+class KSpinLock {
+public:
+ KSpinLock() = default;
+
+ KSpinLock(const KSpinLock&) = delete;
+ KSpinLock& operator=(const KSpinLock&) = delete;
+
+ KSpinLock(KSpinLock&&) = delete;
+ KSpinLock& operator=(KSpinLock&&) = delete;
+
+ void Lock();
+ void Unlock();
+ [[nodiscard]] bool TryLock();
+
+private:
+ std::atomic_flag lck = ATOMIC_FLAG_INIT;
+};
+
+using KScopedSpinLock = KScopedLock<KSpinLock>;
+
+} // namespace Kernel