diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2016-02-24 13:31:46 +0100 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2016-02-24 13:31:46 +0100 |
commit | bf2adf72c4fb4e04afb95ad3b2ad84c19707f246 (patch) | |
tree | a8ed9da01f7be74cfa9a1402071b0b598ee9425f /src/libutil/sync.hh | |
parent | ccdbf589a47b486876de28a9beab64360ba8b8fc (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.hh | 20 |
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); } }; |