64 lines
1.1 KiB
C
64 lines
1.1 KiB
C
|
#pragma once
|
||
|
|
||
|
#if IL2CPP_THREADS_WIN32
|
||
|
|
||
|
#include "os/ErrorCodes.h"
|
||
|
#include "os/WaitStatus.h"
|
||
|
#include "utils/NonCopyable.h"
|
||
|
|
||
|
#include "WindowsHeaders.h"
|
||
|
|
||
|
namespace il2cpp
|
||
|
{
|
||
|
namespace os
|
||
|
{
|
||
|
class MutexImpl : public il2cpp::utils::NonCopyable
|
||
|
{
|
||
|
public:
|
||
|
MutexImpl();
|
||
|
~MutexImpl();
|
||
|
|
||
|
void Lock(bool interruptible);
|
||
|
bool TryLock(uint32_t milliseconds, bool interruptible);
|
||
|
void Unlock();
|
||
|
|
||
|
private:
|
||
|
HANDLE m_MutexHandle;
|
||
|
};
|
||
|
|
||
|
class FastMutexImpl
|
||
|
{
|
||
|
public:
|
||
|
FastMutexImpl()
|
||
|
{
|
||
|
InitializeCriticalSection(&m_CritialSection);
|
||
|
}
|
||
|
|
||
|
~FastMutexImpl()
|
||
|
{
|
||
|
DeleteCriticalSection(&m_CritialSection);
|
||
|
}
|
||
|
|
||
|
void Lock()
|
||
|
{
|
||
|
EnterCriticalSection(&m_CritialSection);
|
||
|
}
|
||
|
|
||
|
void Unlock()
|
||
|
{
|
||
|
LeaveCriticalSection(&m_CritialSection);
|
||
|
}
|
||
|
|
||
|
CRITICAL_SECTION* GetOSHandle()
|
||
|
{
|
||
|
return &m_CritialSection;
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
CRITICAL_SECTION m_CritialSection;
|
||
|
};
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#endif
|