-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRegularQueue.cpp
More file actions
34 lines (31 loc) · 825 Bytes
/
RegularQueue.cpp
File metadata and controls
34 lines (31 loc) · 825 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
template <class T>
RegularQueue<T>::RegularQueue(size_t n)
: items(n), head(0), tail(0), count(0), empty(n) {}
template <class T>
void RegularQueue<T>::enqueue(T x) {
std::unique_lock<std::mutex> l(lock);
while(empty <= 0) {
dequeue_event.wait(l);
}
items[head] = x;
head = (head + 1) % items.size();
// std::cout << "Set head to : " << head;
count++;
empty--;
enqueue_event.notify_one();
// std::cout << "Enqueueing" << std::endl;
}
template <class T>
T RegularQueue<T>::dequeue() {
std::unique_lock<std::mutex> l(lock);
while(count <= 0) {
enqueue_event.wait(l);
}
T ret = items[tail];
tail = (tail + 1) % items.size();
count--;
empty++;
dequeue_event.notify_one();
// std::cout << "Dequeueing" << std::endl;
return ret;
}