/*** Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: Mutex.Generic.hpp Date: 2021-6-12 Author: Reece ***/ #pragma once #if defined(AURORA_PLATFORM_WIN32) #include "Mutex.Win32.hpp" #elif defined(AURORA_HAS_PTHREADS) #include "Mutex.Unix.hpp" #else #define _AURUNTIME_GENERICMUTEX namespace Aurora::Threading::Primitives { class Mutex : public IWaitable { public: Mutex(); ~Mutex(); bool HasOSHandle(AuMach &mach) override; bool TryLock() override; bool HasLockImplementation() override; void Lock() override; bool Lock(AuUInt64 timeout) override; void Unlock() override; private: #if defined(_AU_HAS_ATOMIC_INTRINS) volatile AuAtomicInt value_{}; #else std::atomic_long value_; #endif }; } #endif