k_spin_lock.h 662 B

123456789101112131415161718192021222324252627282930313233
  1. // Copyright 2021 yuzu Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #pragma once
  5. #include <atomic>
  6. #include "core/hle/kernel/k_scoped_lock.h"
  7. namespace Kernel {
  8. class KSpinLock {
  9. public:
  10. KSpinLock() = default;
  11. KSpinLock(const KSpinLock&) = delete;
  12. KSpinLock& operator=(const KSpinLock&) = delete;
  13. KSpinLock(KSpinLock&&) = delete;
  14. KSpinLock& operator=(KSpinLock&&) = delete;
  15. void Lock();
  16. void Unlock();
  17. [[nodiscard]] bool TryLock();
  18. private:
  19. std::atomic_flag lck = ATOMIC_FLAG_INIT;
  20. };
  21. using KScopedSpinLock = KScopedLock<KSpinLock>;
  22. } // namespace Kernel