Class monitor_base
poet::monitor_base — A base class for monitor objects.
Synopsis
class monitor_base { protected: // protected member functions void wait() const; template<typename Pred> void wait(Pred) const; void notify_all() const; void notify_one() const; };
Description
Deriving from monitor_base
allows a class (whose objects are managed by
a monitor_ptr or contained in a monitor)
to wait on conditions inside member functions, releasing the monitor's mutex until
the condition is satisfied. See "Monitor Object:
An Object Behavioral Pattern for Concurrent Programming" by Douglas C. Schmidt
for more information on monitor objects.
Support for a timed_wait()
could be added in the future.
Example Code
monitor_base
protected member functions
-
void wait() const; template<typename Pred> void wait(Pred pred) const;
Blocks until the object is woken up by another thread via
monitor_base::notify_all
() ormonitor_base::notify_one
(). The mutex in the object's associatedmonitor_ptr
is unlocked before the thread goes to sleep, and then automatically reaquired when the thread wakes up again.If the
pred
parameter is supplied, the call will return whenpred()
returnstrue
.pred()
will be checked whenwait()
is first entered, and whenever the thread is woken by a notification. The mutex will be locked whenpred()
is called. -
void notify_all() const;
Wakes all threads which are currently blocking in
monitor_base::wait
() calls on this object. If no threads are waiting, it has no effect. -
void notify_one() const;
Wakes a single thread which is currently blocking in a
monitor_base::wait
() call on this object. If no threads are waiting, it has no effect.