25#ifndef __JOIN_CONDITION_HPP__
26#define __JOIN_CONDITION_HPP__
97 pthread_cond_wait (&_handle, lock.mutex ()->handle ());
105 template <
class Lock,
class Predicate>
106 void wait (Lock& lock, Predicate pred)
120 template <
class Lock,
class Rep,
class Period>
121 bool timedWait (Lock& lock, std::chrono::duration <Rep, Period> timeout)
123 struct timespec ts =
toTimespec (std::chrono::steady_clock::now () + timeout);
124 int err = pthread_cond_timedwait (&_handle, lock.mutex ()->handle (), &ts);
127 lastError = std::make_error_code (
static_cast <std::errc
> (err));
140 template <
class Lock,
class Rep,
class Period,
class Predicate>
141 bool timedWait (Lock& lock, std::chrono::duration <Rep, Period> timeout, Predicate pred)
143 struct timespec ts =
toTimespec (std::chrono::steady_clock::now () + timeout);
146 int err = pthread_cond_timedwait (&_handle, lock.mutex ()->handle (), &ts);
149 lastError = std::make_error_code (
static_cast <std::errc
> (err));
159 pthread_cond_t _handle;
225 template <class Predicate>
240 template <
class Rep,
class Period>
241 bool timedWait (ScopedLock <SharedMutex>& lock, std::chrono::duration <Rep, Period> timeout)
243 struct timespec ts =
toTimespec (std::chrono::steady_clock::now () + timeout);
244 int err = pthread_cond_timedwait (&_handle, lock.
mutex ()->handle (), &ts);
247 lastError = std::make_error_code (
static_cast <std::errc
> (err));
261 template <
class Rep,
class Period,
class Predicate>
262 bool timedWait (ScopedLock <SharedMutex>& lock, std::chrono::duration <Rep, Period> timeout, Predicate pred)
264 struct timespec ts =
toTimespec (std::chrono::steady_clock::now () + timeout);
267 int err = pthread_cond_timedwait (&_handle, lock.
mutex ()->handle (), &ts);
270 lastError = std::make_error_code (
static_cast <std::errc
> (err));
280 pthread_cond_t _handle;
condition variable class.
Definition condition.hpp:42
void wait(Lock &lock, Predicate pred)
wait on a condition with predicate.
Definition condition.hpp:106
Condition & operator=(const Condition &other)=delete
copy assignment.
void wait(Lock &lock)
wait on a condition.
Definition condition.hpp:95
Condition(const Condition &other)=delete
copy constructor.
void broadcast() noexcept
unblocks all threads currently waiting.
Definition condition.cpp:69
bool timedWait(Lock &lock, std::chrono::duration< Rep, Period > timeout)
wait on a condition until timeout expire.
Definition condition.hpp:121
~Condition()
destroys the mutex object.
Definition condition.cpp:51
bool timedWait(Lock &lock, std::chrono::duration< Rep, Period > timeout, Predicate pred)
wait on a condition with predicate until timeout expire.
Definition condition.hpp:141
Condition(Condition &&other)=delete
move constructor.
Condition()
default constructor.
Definition condition.cpp:38
void signal() noexcept
unblocks one of the waiting threads.
Definition condition.cpp:60
class owning a mutex for the duration of a scoped block.
Definition mutex.hpp:245
Lockable * mutex() const
get associated mutex.
Definition mutex.hpp:300
condition variable class for shared memory.
Definition condition.hpp:166
SharedCondition & operator=(const SharedCondition &other)=delete
copy assignment.
~SharedCondition()
destroys the mutex object.
Definition condition.cpp:92
bool timedWait(ScopedLock< SharedMutex > &lock, std::chrono::duration< Rep, Period > timeout, Predicate pred)
wait on a condition with predicate until timeout expire.
Definition condition.hpp:262
bool timedWait(ScopedLock< SharedMutex > &lock, std::chrono::duration< Rep, Period > timeout)
wait on a condition until timeout expire.
Definition condition.hpp:241
void wait(ScopedLock< SharedMutex > &lock)
wait on a condition.
Definition condition.cpp:119
SharedCondition(const SharedCondition &other)=delete
copy constructor.
void signal() noexcept
unblocks one of the waiting threads.
Definition condition.cpp:101
SharedCondition()
default constructor.
Definition condition.cpp:78
SharedCondition(SharedCondition &&other)=delete
move constructor.
void broadcast() noexcept
unblocks all threads currently waiting.
Definition condition.cpp:110
class used to protect shared data from being simultaneously accessed by multiple process via a shared...
Definition mutex.hpp:175
Definition acceptor.hpp:32
struct timespec toTimespec(std::chrono::time_point< Clock, Duration > timePoint)
converts time_point to timespec.
Definition utils.hpp:423