diff --git a/angelscript/source/as_criticalsection.h b/angelscript/source/as_criticalsection.h index ac84319..b05c224 100644 --- a/angelscript/source/as_criticalsection.h +++ b/angelscript/source/as_criticalsection.h @@ -198,7 +198,7 @@ public: bool TryEnter(); protected: - std::mutex _mutex; + std::unique_ptr _mutex; }; class asCThreadReadWriteLock @@ -215,7 +215,7 @@ public: void ReleaseShared(); bool TryAcquireShared(); protected: - std::shared_mutex _mutex; + std::unique_ptr _mutex; }; #endif diff --git a/angelscript/source/as_thread.cpp b/angelscript/source/as_thread.cpp index 6dd3cca..83f7e22 100644 --- a/angelscript/source/as_thread.cpp +++ b/angelscript/source/as_thread.cpp @@ -349,6 +349,8 @@ asCThreadCriticalSection::asCThreadCriticalSection() // MinGW also only defines this version InitializeCriticalSection(&cs); #endif +#elif defined AS_STD_THREADS + _mutex = std::make_unique(); #endif } @@ -368,7 +370,7 @@ void asCThreadCriticalSection::Enter() #elif defined AS_WINDOWS_THREADS EnterCriticalSection(&cs); #elif defined(AS_STD_THREADS) - _mutex.lock(); + _mutex->lock(); #endif } @@ -379,7 +381,7 @@ void asCThreadCriticalSection::Leave() #elif defined AS_WINDOWS_THREADS LeaveCriticalSection(&cs); #elif defined(AS_STD_THREADS) - _mutex.unlock(); + _mutex->unlock(); #endif } @@ -390,7 +392,7 @@ bool asCThreadCriticalSection::TryEnter() #elif defined AS_WINDOWS_THREADS return TryEnterCriticalSection(&cs) ? true : false; #elif defined(AS_STD_THREADS) - return _mutex.try_lock(); + return _mutex->try_lock(); #else return true; #endif @@ -414,6 +416,8 @@ asCThreadReadWriteLock::asCThreadReadWriteLock() readLocks = CreateSemaphoreW(NULL, maxReaders, maxReaders, 0); InitializeCriticalSection(&writeLock); #endif +#elif defined AS_STD_THREADS + _mutex = std::make_unique(); #endif } @@ -446,7 +450,7 @@ void asCThreadReadWriteLock::AcquireExclusive() // lock the readers when this writer releases them anyway. LeaveCriticalSection(&writeLock); #elif defined(AS_STD_THREADS) - _mutex.lock(); + _mutex->lock(); #endif } @@ -458,7 +462,7 @@ void asCThreadReadWriteLock::ReleaseExclusive() // Release all readers at once ReleaseSemaphore(readLocks, maxReaders, 0); #elif defined(AS_STD_THREADS) - _mutex.unlock(); + _mutex->unlock(); #endif } @@ -470,7 +474,7 @@ void asCThreadReadWriteLock::AcquireShared() // Lock a reader slot WaitForSingleObjectEx(readLocks, INFINITE, FALSE); #elif defined(AS_STD_THREADS) - _mutex.lock_shared(); + _mutex->lock_shared(); #endif } @@ -482,7 +486,7 @@ void asCThreadReadWriteLock::ReleaseShared() // Release the reader slot ReleaseSemaphore(readLocks, 1, 0); #elif defined(AS_STD_THREADS) - _mutex.unlock_shared(); + _mutex->unlock_shared(); #endif }