#include "semaphore.h" //Метод добавления в семафор N void Semaphore::release(size_t n) { for(size_t i = 0; i != n; ++i) { std::lock_guard lock(m_mutex); ++m_value; if(m_value <= 0) { ++m_wakeups; m_cond.notify_one(); } } } //Метод запроса 1 из семафора. //Выполнение потока заблокируется до тех пор, пока в семафоре не будет значение >0 void Semaphore::acquire() { std::unique_lock lock(m_mutex); --m_value; if(m_value < 0) { m_cond.wait(lock, [this] { return m_wakeups > 0; }); --m_wakeups; } }