/* ------------------------------------------- Copyright SoftwareLabs ------------------------------------------- */ #pragma once #include #include namespace NewOS { class ProcessHeader; typedef ProcessHeader* ProcessHeaderRef; /// @brief Access control class, which locks a task until one is done. class Semaphore final { public: explicit Semaphore() = default; ~Semaphore() = default; public: bool IsLocked() const; bool Unlock() noexcept; public: void Sync() noexcept; public: bool Lock(ProcessHeader* process); bool LockOrWait(ProcessHeader* process, const Int64& seconds); public: NEWOS_COPY_DEFAULT(Semaphore); private: ProcessHeaderRef fLockingProcess{nullptr}; }; } // namespace NewOS