Libthreadar 1.6.0
|
Class fast_tampon provides asynchronous communication between two threads. More...
#include <fast_tampon.hpp>
Public Member Functions | |
fast_tampon (unsigned int max_block, unsigned int block_size) | |
constructor More... | |
fast_tampon (const fast_tampon &ref)=delete | |
no copy constructor | |
fast_tampon (fast_tampon &&ref)=default | |
no move constructor | |
fast_tampon & | operator= (const fast_tampon &ref)=delete |
no assignment operator | |
fast_tampon & | operator= (fast_tampon &&ref) noexcept=default |
no move operator | |
~fast_tampon () | |
void | get_block_to_feed (T *&ptr, unsigned int &num) |
feeder call - step 1 More... | |
void | feed (T *ptr, unsigned int written) |
feeder call - step 2 More... | |
void | feed_cancel_get_block (T *ptr) |
feeder call - step 2 alternative More... | |
void | fetch (T *&ptr, unsigned int &num) |
fetcher call - step 1 More... | |
void | fetch_recycle (T *ptr) |
fetcher call - step 2 More... | |
void | fetch_push_back (T *ptr, unsigned int new_num) |
fetcher call - step 2 alternative More... | |
bool | is_empty () const |
to know whether the fast_tampon has objects (readable or skipped) More... | |
bool | is_not_empty () const |
to know whether the fast_tampon is not empty More... | |
bool | is_full () const |
for feeder to know whether the next call to get_block_to_feed() will be blocking More... | |
bool | is_not_full () const |
to know whether the fast_tampon is not full More... | |
unsigned int | size () const |
unsigned int | block_size () const |
void | reset () |
reset the object fields and mutex as if the object was just created More... | |
Class fast_tampon provides asynchronous communication between two threads.
A first thread is defined as a feeder and feeds the fast_tampon object with data that the other thread known as the fetcher will read at a later time. If the fast_tampon is empty the fetcher thread is suspended, if it is full the feeder thread is suspended. Feeding an empty fast_tampon automatically awakes the fetcher thread if it was suspended for reading, reading a full fast_tampon automatically awakes a feeder that was suspended for writing.
The feeder has to proceed in two steps:
The fetcher interface is almost symmetric, and also has two steps:
Only on thread can be a feeder, only one (other) thread can be a fetcher.
fast_tampon objects cannot be copied, once created they can only be passed as reference or using a pointer to them.
Definition at line 87 of file fast_tampon.hpp.
libthreadar::fast_tampon< T >::fast_tampon | ( | unsigned int | max_block, |
unsigned int | block_size | ||
) |
constructor
[in] | max_block | is the maximum number of buffers that can be written to without being read |
[in] | block_size | is the maximum size of each buffer |
Definition at line 213 of file fast_tampon.hpp.
References libthreadar::fast_tampon< T >::block_size(), and libthreadar::fast_tampon< T >::reset().
libthreadar::fast_tampon< T >::~fast_tampon |
the destructor releases all internally allocated blocks even if they have been fetched or obtained for feeding.
Definition at line 255 of file fast_tampon.hpp.
|
inline |
returns the allocation size of each block
Definition at line 181 of file fast_tampon.hpp.
Referenced by libthreadar::fast_tampon< T >::fast_tampon().
void libthreadar::fast_tampon< T >::feed | ( | T * | ptr, |
unsigned int | written | ||
) |
feeder call - step 2
Once data has been copied into the block obtained by a call to get_block_to_feed(), use this call to given back this block to the fast_tampon object
[in] | ptr | address of the block to return to the fast_tampon object |
[in] | written | is the number of element of the block that contain meaninful information, written shall be less than or equal to the argument "num" given by get_block_to_feed(). |
Definition at line 304 of file fast_tampon.hpp.
void libthreadar::fast_tampon< T >::feed_cancel_get_block | ( | T * | ptr | ) |
feeder call - step 2 alternative
put back the block obtained by get_block_to_feed() for example because it was not used. This block will be the next one returned by get_block_to_feed
[in] | ptr | is the address of the block to put back in place for next feed |
Definition at line 329 of file fast_tampon.hpp.
void libthreadar::fast_tampon< T >::fetch | ( | T *& | ptr, |
unsigned int & | num | ||
) |
fetcher call - step 1
obtain the next block to read
[out] | ptr | is the address of the data to be read |
[out] | num | is the number of element available for reading |
Definition at line 338 of file fast_tampon.hpp.
References THREADAR_BUG.
void libthreadar::fast_tampon< T >::fetch_push_back | ( | T * | ptr, |
unsigned int | new_num | ||
) |
fetcher call - step 2 alternative
put back the fetched block if some data remain unfetched for now in this block,
[in] | ptr | the address of the block to push back into the fast_tampon object |
[in] | new_num | is the new amount of data that is left for reading assuming some data but not all could be read from that buffer. |
Definition at line 397 of file fast_tampon.hpp.
void libthreadar::fast_tampon< T >::fetch_recycle | ( | T * | ptr | ) |
fetcher call - step 2
Once data has been read, the fetcher must recycle the block into the fast_tampon object
[in] | ptr | the address of the block to recycle |
Definition at line 374 of file fast_tampon.hpp.
void libthreadar::fast_tampon< T >::get_block_to_feed | ( | T *& | ptr, |
unsigned int & | num | ||
) |
feeder call - step 1
provides a single block where the caller will be able to write data to in order to be transmitted to the fetcher thread
[out] | ptr | the address where the caller can write data to |
[out] | num | is the size of the block in number of objects of type T |
Definition at line 268 of file fast_tampon.hpp.
References THREADAR_BUG.
|
inline |
to know whether the fast_tampon has objects (readable or skipped)
Definition at line 162 of file fast_tampon.hpp.
Referenced by libthreadar::fast_tampon< T >::is_not_empty().
|
inline |
for feeder to know whether the next call to get_block_to_feed() will be blocking
Definition at line 168 of file fast_tampon.hpp.
Referenced by libthreadar::fast_tampon< T >::is_not_full().
|
inline |
to know whether the fast_tampon is not empty
Definition at line 165 of file fast_tampon.hpp.
References libthreadar::fast_tampon< T >::is_empty().
|
inline |
to know whether the fast_tampon is not full
Definition at line 171 of file fast_tampon.hpp.
References libthreadar::fast_tampon< T >::is_full().
void libthreadar::fast_tampon< T >::reset |
reset the object fields and mutex as if the object was just created
Definition at line 409 of file fast_tampon.hpp.
Referenced by libthreadar::fast_tampon< T >::fast_tampon().
|
inline |
returns the size of the fast_tampon in maximum number of block it can contain
Definition at line 176 of file fast_tampon.hpp.