52 lines
1.0 KiB
C++
52 lines
1.0 KiB
C++
#pragma once
|
|
#include "utils/NonCopyable.h"
|
|
|
|
namespace il2cpp
|
|
{
|
|
namespace os
|
|
{
|
|
class ReaderWriterLockImpl;
|
|
|
|
class ReaderWriterLock
|
|
{
|
|
public:
|
|
ReaderWriterLock();
|
|
~ReaderWriterLock();
|
|
|
|
void LockExclusive();
|
|
void LockShared();
|
|
void ReleaseExclusive();
|
|
void ReleaseShared();
|
|
|
|
ReaderWriterLockImpl* GetImpl();
|
|
|
|
private:
|
|
ReaderWriterLockImpl* m_Impl;
|
|
};
|
|
|
|
struct ReaderWriterAutoLock : public il2cpp::utils::NonCopyable
|
|
{
|
|
ReaderWriterAutoLock(ReaderWriterLock* lock, bool exclusive = false)
|
|
: m_Lock(lock), m_Exclusive(exclusive)
|
|
{
|
|
if (m_Exclusive)
|
|
m_Lock->LockExclusive();
|
|
else
|
|
m_Lock->LockShared();
|
|
}
|
|
|
|
~ReaderWriterAutoLock()
|
|
{
|
|
if (m_Exclusive)
|
|
m_Lock->ReleaseExclusive();
|
|
else
|
|
m_Lock->ReleaseShared();
|
|
}
|
|
|
|
private:
|
|
ReaderWriterLock* m_Lock;
|
|
bool m_Exclusive;
|
|
};
|
|
}
|
|
}
|