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