2025-03-06 15:35:34 +01:00

42 lines
882 B
C++

#ifndef CTRPLUGINFRAMEWORK_SYSTEM_MUTEX_HPP
#define CTRPLUGINFRAMEWORK_SYSTEM_MUTEX_HPP
#include "3ds.h"
namespace CTRPluginFramework
{
class Mutex
{
public:
inline Mutex(void) {
RecursiveLock_Init(&_lock);
}
inline ~Mutex(void) {
// I suppose that we can "force" unlock the mutex
if (_lock.counter > 0)
{
_lock.counter = 1;
RecursiveLock_Unlock(&_lock);
}
}
inline void Lock(void) {
RecursiveLock_Lock(&_lock);
}
// Return true on failure
inline bool TryLock(void) {
return RecursiveLock_TryLock(&_lock) != 0;
}
inline void Unlock(void) {
RecursiveLock_Unlock(&_lock);
}
private:
RecursiveLock _lock;
};
}
#endif