Fleet  0.0.9
Inference in the LOT
OrderedLock.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <chrono>
4 #include <mutex>
5 #include <condition_variable>
6 #include <queue>
7 
16 class OrderedLock {
17 public:
18  std::queue<std::condition_variable*> cvar;
19  std::mutex cvar_lock;
20  bool locked;
21 
22  OrderedLock() : locked(false) {}
23 
24  void lock() {
25  std::unique_lock<std::mutex> acquire(cvar_lock);
26  if(locked) {
27  std::condition_variable signal;
28  cvar.emplace(&signal);
29  signal.wait(acquire);
30  }
31  else {
32  locked = true;
33  }
34  }
35 
36  void unlock() {
37  std::unique_lock<std::mutex> acquire(cvar_lock);
38  if(cvar.empty()) {
39  locked = false;
40  }
41  else {
42  cvar.front()->notify_one();
43  cvar.pop();
44  }
45  }
46 };
Definition: OrderedLock.h:16
void unlock()
Definition: OrderedLock.h:36
OrderedLock()
Definition: OrderedLock.h:22
std::mutex cvar_lock
Definition: OrderedLock.h:19
std::queue< std::condition_variable * > cvar
Definition: OrderedLock.h:18
bool locked
Definition: OrderedLock.h:20
void lock()
Definition: OrderedLock.h:24