// 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