/*** 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 */ class IConditionVariable { public: virtual AuSPtr GetMutex() = 0; virtual bool WaitForSignal(AuUInt32 timeout = 0) = 0; virtual void Broadcast() = 0; virtual void Signal() = 0; }; AUKN_SHARED_API(ConditionVariable, IConditionVariable, const AuSPtr &mutex); }