Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
signal.hpp
Go to the documentation of this file.
1// === AUDIT STATUS ===
2// internal: { status: not started, auditors: [], date: YYYY-MM-DD }
3// external_1: { status: not started, auditors: [], date: YYYY-MM-DD }
4// external_2: { status: not started, auditors: [], date: YYYY-MM-DD }
5// =====================
6
7#pragma once
8#include <atomic>
9#include <cstdint>
10
17class Signal {
18 public:
19 Signal(uint32_t initial_level = 1)
20 : signal_(initial_level) {};
21 ~Signal() = default;
22 Signal(const Signal& other)
23 : signal_(other.signal_.load())
24 {}
25 Signal(const Signal&& other) = delete;
26 Signal& operator=(const Signal& other)
27 {
28 if (this != &other) {
29 signal_.store(other.signal_.load());
30 }
31 return *this;
32 }
33 Signal& operator=(const Signal&& other) = delete;
34
40 void wait_for_level(uint32_t level = 0)
41 {
42 uint32_t current_level = signal_.load();
43 while (current_level > level) {
44 signal_.wait(current_level);
45 current_level = signal_.load();
46 }
47 }
48
54 void signal_level(uint32_t level = 0)
55 {
56 signal_.store(level);
57 signal_.notify_all();
58 }
59
60 void signal_decrement(uint32_t delta = 1)
61 {
62 signal_.fetch_sub(delta);
63 signal_.notify_all();
64 }
65
66 private:
67 std::atomic<uint32_t> signal_;
68};
69} // namespace bb::crypto::merkle_tree
Used in parallel insertions in the the IndexedTree. Workers signal to other following workes as they ...
Definition signal.hpp:17
Signal(const Signal &other)
Definition signal.hpp:22
Signal & operator=(const Signal &&other)=delete
Signal(uint32_t initial_level=1)
Definition signal.hpp:19
void signal_level(uint32_t level=0)
Signals that the given level has been passed.
Definition signal.hpp:54
void signal_decrement(uint32_t delta=1)
Definition signal.hpp:60
Signal(const Signal &&other)=delete
std::atomic< uint32_t > signal_
Definition signal.hpp:67
void wait_for_level(uint32_t level=0)
Causes the thread to wait until the required level has been signalled.
Definition signal.hpp:40
Signal & operator=(const Signal &other)
Definition signal.hpp:26