#pragma once #include "defaults.h" #include // named sempahore class TSemaphore { public: TSemaphore(const char* name, ui32 maxFreeCount); ~TSemaphore(); // Increase the semaphore counter. void Release() noexcept; // Keep a thread held while the semaphore counter is equal 0. void Acquire() noexcept; // Try to enter the semaphore gate. A non-blocking variant of Acquire. // Returns 'true' if the semaphore counter decreased bool TryAcquire() noexcept; private: class TImpl; THolder Impl_; }; // unnamed semaphore, faster, than previous class TFastSemaphore { public: TFastSemaphore(ui32 maxFreeCount); ~TFastSemaphore(); void Release() noexcept; void Acquire() noexcept; bool TryAcquire() noexcept; private: class TImpl; THolder Impl_; };