|
cwidget 0.5.18
|
A higher-level abstraction borrowed from Concurrent Haskell, which borrowed it from another language I forget. More...
#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. | |
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.
|
inline |
Fill this box with a value.
If the box is full, block until it is empty.
|
inline |
Retrieve the current value of this box.
If the box is empty, block until it is full.
|
inline |
If the box is empty, place a value in it; otherwise, do nothing.
| t | the value to place in the box |
|
inline |
If there is a value in the box, retrieve it immediately; otherwise do nothing.
| out | the location in which the value should be stored |