A higher-level abstraction borrowed from Concurrent Haskell, which borrowed it from another language I forget.
More...
|
| box () |
| Create an empty box. More...
|
|
| box (const T &_val) |
| Create a box containing the given value. More...
|
|
T | take () |
| Retrieve the current value of this box. More...
|
|
void | put (const T &t) |
| Fill this box with a value. More...
|
|
bool | try_take (T &out) |
| If there is a value in the box, retrieve it immediately; otherwise do nothing. More...
|
|
bool | try_put (const T &t) |
| If the box is empty, place a value in it; otherwise, do nothing. More...
|
|
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.
|
|
template<typename T>
class cwidget::threads::box< T >
A higher-level abstraction borrowed from Concurrent Haskell, which borrowed it from another language I forget.
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.