/*** Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: AuMutex.NT.hpp Date: 2021-6-12 Author: Reece ***/ #pragma once namespace Aurora::Threading::Primitives { struct Mutex : IHyperWaitable { Mutex(); ~Mutex(); bool HasOSHandle(AuMach &mach) override; bool TryLock() override; bool HasLockImplementation() override; void SlowLock() override; bool LockMS(AuUInt64 timeout) override; bool LockNS(AuUInt64 timeout) override; void Unlock() override; private: #if defined(AURORA_FORCE_SRW_LOCKS) SRWLOCK atomicHolder_; CONDITION_VARIABLE wakeup_; #endif }; }