/*** Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: ConditionVariable.hpp Date: 2021-6-9 Author: Reece ***/ #pragma once namespace Aurora::Threading::Primitives { /** A standard conditional variable tied to IConditionalMutex
Multiple conditionals may use a common IConditionalMutex.
Unlike the POSIX standard,
1) we define no waitable as illegal
2) conditional variables may not rebind their mutex */ struct IConditionVariable { virtual AuSPtr GetMutex() = 0; virtual bool WaitForSignal(AuUInt32 timeout = 0) = 0; virtual void Broadcast() = 0; virtual void Signal() = 0; }; AUKN_SHARED_SOO2(ConditionVariable, IConditionVariable, kPrimitiveSizeCond, ((const AuSPtr&, pMutex)), const AuSPtr &mutex); }