aboutsummaryrefslogtreecommitdiffstats
path: root/vespamalloc
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-10-14 15:34:27 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-10-14 15:34:27 +0000
commit3f3e5f3fd2aa5be319a25c02774283588b12ce23 (patch)
treea19267f7d2d84285f48b77d37d5430a497615977 /vespamalloc
parent129d199ff9c387c1419bc9d8372abf5fd57a5e8c (diff)
vespalib::Monitor -> std:.mutex/std::condition_variable
Diffstat (limited to 'vespamalloc')
-rw-r--r--vespamalloc/src/tests/allocfree/queue.h27
1 files changed, 14 insertions, 13 deletions
diff --git a/vespamalloc/src/tests/allocfree/queue.h b/vespamalloc/src/tests/allocfree/queue.h
index 5177a763b4b..354f99932db 100644
--- a/vespamalloc/src/tests/allocfree/queue.h
+++ b/vespamalloc/src/tests/allocfree/queue.h
@@ -2,8 +2,9 @@
#pragma once
#include <vespa/vespalib/util/guard.h>
-#include <vespa/vespalib/util/sync.h>
#include <queue>
+#include <condition_variable>
+
namespace vespalib {
@@ -11,7 +12,8 @@ template <typename T>
class Queue {
private:
std::queue<T> _q;
- Monitor _cond;
+ std::mutex _lock;
+ std::condition_variable _cond;
int _waitRead;
int _waitWrite;
uint32_t _maxSize;
@@ -30,6 +32,7 @@ public:
template <typename T>
Queue<T>::Queue(const T &nil, uint32_t maxSize) :
_q(),
+ _lock(),
_cond(),
_waitRead(0),
_waitWrite(0),
@@ -40,36 +43,34 @@ Queue<T>::Queue(const T &nil, uint32_t maxSize) :
}
template <typename T>
-Queue<T>::~Queue()
-{
-}
+Queue<T>::~Queue() = default;
template <typename T>
void Queue<T>::enqueue(const T &entry) {
- MonitorGuard guard(_cond);
+ std::unique_lock guard(_lock);
while (_q.size() >= _maxSize) {
CounterGuard cntGuard(_waitWrite);
- guard.wait();
+ _cond.wait(guard);
}
_q.push(entry);
if (_waitRead > 0) {
- guard.signal();
+ _cond.notify_one();
}
}
template <typename T>
void Queue<T>::close() {
- MonitorGuard guard(_cond);
+ std::unique_lock guard(_lock);
_closed = true;
if (_waitRead > 0) {
- guard.signal();
+ _cond.notify_one();
}
}
template <typename T>
T Queue<T>::dequeue() {
- MonitorGuard guard(_cond);
+ std::unique_lock guard(_lock);
while (_q.empty() && !_closed) {
CounterGuard cntGuard(_waitRead);
- guard.wait();
+ _cond.wait(guard);
}
if (_q.empty()) {
return _nil;
@@ -77,7 +78,7 @@ T Queue<T>::dequeue() {
T tmp = _q.front();
_q.pop();
if (_waitWrite > 0) {
- guard.signal();
+ _cond.notify_one();
}
return tmp;
}