cwidget
0.5.17
|
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. 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. | |
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 |
Create an empty box.
|
inline |
Create a box containing the given value.
|
inline |
Fill this box with a value.
If the box is full, block until it is empty.
Referenced by cwidget::threads::box< T *>::put().
|
inline |
Retrieve the current value of this box.
If the box is empty, block until it is full.
Referenced by cwidget::threads::box< T *>::take().
|
inline |
If the box is empty, place a value in it; otherwise, do nothing.
t | the value to place in the box |
Referenced by cwidget::threads::box< T *>::try_put().
|
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 |
Referenced by cwidget::threads::box< T *>::try_take().