18 std::lock_guard<std::mutex> lock(state_->mu);
19 state_->queue.push(std::move(
value));
21 state_->cv.notify_one();
25 std::lock_guard<std::mutex> lock(state_->mu);
26 if (state_->queue.empty())
28 std::string
v = std::move(state_->queue.front());
35 std::unique_lock<std::mutex> lock(
state->mu);
37 std::string
v = std::move(
state->queue.front());
44 std::unique_lock<std::mutex> lock(
state->mu);
47 if (!
state->cv.wait_for(lock, std::chrono::milliseconds(timeoutMs), [&
state] { return !state->queue.empty(); }))
49 std::string
v = std::move(
state->queue.front());
55 std::lock_guard<std::mutex> lock(state_->mu);
56 return !state_->queue.empty();
60 std::lock_guard<std::mutex> lock(state_->mu);
61 return static_cast<int>(state_->queue.size());
65 std::lock_guard<std::mutex> lock(state_->mu);
66 while (!state_->queue.empty())
JobSystemThreadPool::State * state
void push(std::string value)
std::string pop()
Non-blocking pop; returns "" if empty.
std::string demand()
Block until a value is available, then pop it.
std::string getName() const
std::string supply(int timeoutMs)
Block up to timeoutMs; returns "" on timeout.