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.