CCF
Loading...
Searching...
No Matches
work_beacon.h
Go to the documentation of this file.
1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the Apache 2.0 License.
3#pragma once
4
5#define FMT_HEADER_ONLY
6#include <condition_variable>
7#include <fmt/format.h>
8#include <iostream>
9#include <memory>
10#include <mutex>
11
12namespace ccf::ds
13{
15 {
16 protected:
17 std::mutex mutex;
18 std::condition_variable condition_variable;
19 size_t work_available = 0;
20
21 public:
23 {
24 std::unique_lock<std::mutex> lock(mutex);
25 condition_variable.wait(lock, [this] { return work_available > 0; });
27 }
28
29 // Returns true if condition variable indicated work is available, false if
30 // timeout was reached
31 template <typename DurationRep, typename DurationPeriod>
33 const std::chrono::duration<DurationRep, DurationPeriod>& timeout)
34 {
35 std::unique_lock<std::mutex> lock(mutex);
36 const auto woke_for_work = condition_variable.wait_for(
37 lock, timeout, [this] { return work_available > 0; });
38 if (woke_for_work)
39 {
40 if (work_available > 0)
41 {
43 }
44 }
45
46 return woke_for_work;
47 }
48
50 {
51 {
52 std::lock_guard<std::mutex> lock(mutex);
54 }
55
56 condition_variable.notify_all();
57 }
58 };
59
60 using WorkBeaconPtr = std::shared_ptr<WorkBeacon>;
61}
Definition work_beacon.h:15
bool wait_for_work_with_timeout(const std::chrono::duration< DurationRep, DurationPeriod > &timeout)
Definition work_beacon.h:32
void notify_work_available()
Definition work_beacon.h:49
void wait_for_work()
Definition work_beacon.h:22
std::condition_variable condition_variable
Definition work_beacon.h:18
size_t work_available
Definition work_beacon.h:19
std::mutex mutex
Definition work_beacon.h:17
Definition contiguous_set.h:12
std::shared_ptr< WorkBeacon > WorkBeaconPtr
Definition work_beacon.h:60