| 123456789101112131415161718192021222324252627282930313233343536373839 |
- // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
- // SPDX-License-Identifier: GPL-2.0-or-later
- #pragma once
- #include <atomic>
- #include "core/hle/kernel/k_scoped_lock.h"
- namespace Kernel {
- class KernelCore;
- class KLightLock {
- public:
- explicit KLightLock(KernelCore& kernel) : m_kernel{kernel} {}
- void Lock();
- void Unlock();
- bool LockSlowPath(uintptr_t owner, uintptr_t cur_thread);
- void UnlockSlowPath(uintptr_t cur_thread);
- bool IsLocked() const {
- return m_tag.load() != 0;
- }
- bool IsLockedByCurrentThread() const;
- private:
- std::atomic<uintptr_t> m_tag{};
- KernelCore& m_kernel;
- };
- using KScopedLightLock = KScopedLock<KLightLock>;
- } // namespace Kernel
|