.. _program_listing_file_host_include_Semaphore.hpp: Program Listing for File Semaphore.hpp ====================================== |exhale_lsh| :ref:`Return to documentation for file ` (``host/include/Semaphore.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #pragma once #include #include namespace PowerSensor3 { class Semaphore { public: explicit Semaphore(unsigned initialLevel = 0): level(initialLevel) {} void up(unsigned count = 1) { std::unique_lock lock(mutex); level += count; if (count == 1) cv.notify_one(); else cv.notify_all(); } void down(unsigned count = 1) { std::unique_lock lock(mutex); cv.wait(lock, [this, count] { return level >= count; }); level -= count; } private: std::mutex mutex; std::condition_variable cv; unsigned level; }; } // namespace PowerSensor3