// Copyright (c) Wojciech Figat. All rights reserved.
#pragma once
#if PLATFORM_WIN32
#include "WindowsMinimal.h"
///
/// Win32 implementation of a read/write lock that allows for shared reading by multiple threads and exclusive writing by a single thread.
///
class FLAXENGINE_API Win32ReadWriteLock
{
private:
mutable Windows::SRWLOCK _lock;
private:
NON_COPYABLE(Win32ReadWriteLock);
public:
///
/// Initializes a new instance of the class.
///
Win32ReadWriteLock()
{
Windows::InitializeSRWLock(&_lock);
}
///
/// Finalizes an instance of the class.
///
~Win32ReadWriteLock()
{
}
public:
///
/// Locks for shared reading.
///
__forceinline void ReadLock() const
{
Windows::AcquireSRWLockShared(&_lock);
}
///
/// Releases the lock after shared reading.
///
__forceinline void ReadUnlock() const
{
Windows::ReleaseSRWLockShared(&_lock);
}
///
/// Locks for exclusive writing.
///
__forceinline void WriteLock() const
{
Windows::AcquireSRWLockExclusive(&_lock);
}
///
/// Releases the lock after exclusive writing.
///
__forceinline void WriteUnlock() const
{
Windows::ReleaseSRWLockExclusive(&_lock);
}
};
#endif