| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- // Copyright 2021 yuzu Emulator Project
- // Licensed under GPLv2 or any later version
- // Refer to the license.txt file included.
- #pragma once
- #include <atomic>
- #include "common/common_types.h"
- #include "core/hle/kernel/k_scoped_lock.h"
- namespace Kernel {
- class KernelCore;
- class KLightLock {
- public:
- explicit KLightLock(KernelCore& kernel_) : kernel{kernel_} {}
- void Lock();
- void Unlock();
- void LockSlowPath(uintptr_t owner, uintptr_t cur_thread);
- void UnlockSlowPath(uintptr_t cur_thread);
- bool IsLocked() const {
- return tag != 0;
- }
- bool IsLockedByCurrentThread() const;
- private:
- std::atomic<uintptr_t> tag{};
- KernelCore& kernel;
- };
- using KScopedLightLock = KScopedLock<KLightLock>;
- } // namespace Kernel
|