llarp/util/thread/barrier.hpp

Namespaces

Name
llarp
[crypto.hpp]
llarp::util

Classes

Name
class llarp::util::Barrier
Barrier class that blocks all threads until the high water mark of threads (set during construction) is reached, then releases them all.

Source code

#pragma once
#include <mutex>
#include <condition_variable>

namespace llarp
{
  namespace util
  {
    class Barrier
    {
      std::mutex mutex;
      std::condition_variable cv;
      unsigned pending;

     public:
      Barrier(unsigned threads) : pending{threads}
      {}

      bool
      Block()
      {
        std::unique_lock lock{mutex};
        if (pending == 1)
        {
          pending = 0;
          lock.unlock();
          cv.notify_all();
          return true;
        }
        else if (pending > 1)
        {
          pending--;
        }
        cv.wait(lock, [this] { return !pending; });
        return false;
      }
    };

  }  // namespace util
}  // namespace llarp

Updated on 2026-01-10 at 22:49:45 +0000