aboutsummaryrefslogtreecommitdiff
path: root/src/libutil/sync.hh
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2016-02-24 13:31:46 +0100
committerEelco Dolstra <eelco.dolstra@logicblox.com>2016-02-24 13:31:46 +0100
commitbf2adf72c4fb4e04afb95ad3b2ad84c19707f246 (patch)
treea8ed9da01f7be74cfa9a1402071b0b598ee9425f /src/libutil/sync.hh
parentccdbf589a47b486876de28a9beab64360ba8b8fc (diff)
std::condition_variable_any -> std::condition_variable
The latter is supposed to be more efficient.
Diffstat (limited to 'src/libutil/sync.hh')
-rw-r--r--src/libutil/sync.hh20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/libutil/sync.hh b/src/libutil/sync.hh
index 3abffa7c7..c99c098ac 100644
--- a/src/libutil/sync.hh
+++ b/src/libutil/sync.hh
@@ -38,37 +38,37 @@ public:
{
private:
Sync * s;
+ std::unique_lock<std::mutex> lk;
friend Sync;
- Lock(Sync * s) : s(s) { s->mutex.lock(); }
+ Lock(Sync * s) : s(s), lk(s->mutex) { }
public:
- Lock(Lock && l) : s(l.s) { l.s = 0; }
+ Lock(Lock && l) : s(l.s) { abort(); }
Lock(const Lock & l) = delete;
- ~Lock() { if (s) s->mutex.unlock(); }
+ ~Lock() { }
T * operator -> () { return &s->data; }
T & operator * () { return s->data; }
- /* FIXME: performance impact of condition_variable_any? */
- void wait(std::condition_variable_any & cv)
+ void wait(std::condition_variable & cv)
{
assert(s);
- cv.wait(s->mutex);
+ cv.wait(lk);
}
template<class Rep, class Period, class Predicate>
- bool wait_for(std::condition_variable_any & cv,
+ bool wait_for(std::condition_variable & cv,
const std::chrono::duration<Rep, Period> & duration,
Predicate pred)
{
assert(s);
- return cv.wait_for(s->mutex, duration, pred);
+ return cv.wait_for(lk, duration, pred);
}
template<class Clock, class Duration>
- std::cv_status wait_until(std::condition_variable_any & cv,
+ std::cv_status wait_until(std::condition_variable & cv,
const std::chrono::time_point<Clock, Duration> & duration)
{
assert(s);
- return cv.wait_until(s->mutex, duration);
+ return cv.wait_until(lk, duration);
}
};