6 #include <condition_variable>
20 std::unique_lock<std::mutex> lock(m_mutex);
28 std::unique_lock<std::mutex> lock(m_mutex);
29 m_cv.wait(lock, [&]() {
return m_count != 0; });
36 std::condition_variable m_cv;
43 : m_count(count), m_semaphore(0) {}
47 std::atomic_thread_fence(std::memory_order_release);
48 int count = m_count.fetch_add(1, std::memory_order_relaxed);
55 int count = m_count.fetch_sub(1, std::memory_order_relaxed);
58 std::atomic_thread_fence(std::memory_order_acquire);
62 std::atomic<int> m_count;
fast_semaphore(int count) noexcept
semaphore(int count) noexcept