25#ifndef MYSQL_HARNESS_STDX_MONITOR_H_INCLUDED
26#define MYSQL_HARNESS_STDX_MONITOR_H_INCLUDED
28#include <condition_variable>
44 std::lock_guard<std::mutex> lk{
mtx_};
67 std::lock_guard<std::mutex> lk{this->
mtx_};
69 return f(this->
t_,
cv_);
78 template <
class Rep,
class Period,
class Pred>
79 auto wait_for(
const std::chrono::duration<Rep, Period> &rel_time, Pred pred) {
80 std::unique_lock<std::mutex> lk{this->
mtx_};
82 return cv_.wait_for(lk, rel_time,
83 [
this, pred]() {
return pred(this->
t_); });
87 auto wait(Pred pred)
const {
88 std::unique_lock<std::mutex> lk{this->
mtx_};
90 return cv_.wait(lk, [
this, pred]() {
return pred(this->
t_); });
94 mutable std::condition_variable
cv_;
Monitor pattern.
Definition: monitor.h:38
Monitor(T t)
Definition: monitor.h:40
std::mutex mtx_
Definition: monitor.h:52
T t_
Definition: monitor.h:50
auto operator()(F f) const
Definition: monitor.h:43
Monitor can be waited for.
Definition: monitor.h:61
auto serialize_with_cv(F f) const
Definition: monitor.h:66
std::condition_variable cv_
Definition: monitor.h:94
auto wait(Pred pred) const
Definition: monitor.h:87
auto wait_for(const std::chrono::duration< Rep, Period > &rel_time, Pred pred)
wait_for time or pred is true.
Definition: monitor.h:79
Definition: varlen_sort.h:183