13 #ifndef __PROCESS_QUEUE_HPP__
14 #define __PROCESS_QUEUE_HPP__
41 synchronized (data->lock) {
42 if (data->promises.empty()) {
43 data->elements.push(t);
45 promise = data->promises.front();
46 data->promises.pop_front();
50 if (promise.
get() !=
nullptr) {
57 synchronized (data->lock) {
58 if (data->elements.empty()) {
60 return data->promises.back()->future();
71 synchronized (data->lock) {
72 return data->elements.size();
88 std::atomic_flag lock = ATOMIC_FLAG_INIT;
91 std::deque<Owned<Promise<T>>> promises;
94 std::queue<T> elements;
97 std::shared_ptr<Data> data;
102 #endif // __PROCESS_QUEUE_HPP__
Queue()
Definition: queue.hpp:32
void put(const T &t)
Definition: queue.hpp:34
T * get() const
Definition: owned.hpp:115
Definition: future.hpp:73
Protocol< PromiseRequest, PromiseResponse > promise
Result< Process > process(pid_t pid)
Definition: freebsd.hpp:30
size_t size() const
Definition: queue.hpp:69
Definition: future.hpp:57