#include <threads.h>
Public Member Functions | |
| box () | |
| Create an empty box. | |
| box (const T &_val) | |
| Create a box containing the given value. | |
| T | take () |
| Retrieve the current value of this box. | |
| void | put (const T &t) |
| Fill this box with a value. | |
| bool | try_take (T &out) |
| If there is a value in the box, retrieve it immediately; otherwise do nothing. | |
| bool | try_put (const T &t) |
| If the box is empty, place a value in it; otherwise, do nothing. | |
| bool | timed_take (T &out, const timespec &until) |
| As try_take(), but wait for the given amount of time before giving up. | |
| bool | timed_put (const T &t, const timespec &until) |
| As try_put(), but wait for the given amount of time before giving up. | |
| template<typename Mutator> | |
| void | update (const Mutator &m) |
| Atomically modify the contents of the box; if an exception is thrown by the given function object, no action will be performed. | |
This represents a "box" that can either hold a value or be empty. Any thread can take the current value of the box or place a new value inside it; the attempt will block until a value is available or the box is empty, respectively. It's sort of a single-element bounded communications channel.
The value in the box is stored with copying semantics. Like the other threading primitives, boxes are not copyable.
| cwidget::threads::box< T >::box | ( | ) | [inline] |
Create an empty box.
| cwidget::threads::box< T >::box | ( | const T & | _val | ) | [inline] |
Create a box containing the given value.
| T cwidget::threads::box< T >::take | ( | ) | [inline] |
Retrieve the current value of this box.
If the box is empty, block until it is full.
References cwidget::threads::condition::wait().
| void cwidget::threads::box< T >::put | ( | const T & | t | ) | [inline] |
Fill this box with a value.
If the box is full, block until it is empty.
References cwidget::threads::condition::wait(), and cwidget::threads::condition::wake_one().
| bool cwidget::threads::box< T >::try_take | ( | T & | out | ) | [inline] |
| bool cwidget::threads::box< T >::try_put | ( | const T & | t | ) | [inline] |
If the box is empty, place a value in it; otherwise, do nothing.
| t | the value to place in the box |
References cwidget::threads::condition::wake_one().
1.5.6