implementation of producer consumer model More...
#include <PThreadUtil.h>
Public Types | |
typedef ProducerConsumerModelContext < DataType, BufferSize > | _Context |
Public Member Functions | |
ProducerConsumerModelContext (DataType const terminator) | |
constructor | |
~ProducerConsumerModelContext () | |
destructor | |
Static Public Member Functions | |
static void | produce (_Context *context, DataType item) |
production function | |
static bool | consume (_Context *context, DataType *item) |
consumption function return false if no more products available otherwise return true | |
static void | complete_production (_Context *context) |
it should be called when production complete | |
template<class T > | |
static void | locked_print (T msg, _Context *context) |
utility | |
Private Member Functions | |
int | lock () |
int | unlock () |
int | try_lock () |
int | producer_wait () |
int | producer_signal () |
int | consumer_wait () |
int | consumer_signal () |
bool | buffer_is_full () |
bool | buffer_is_empty () |
void | producer_next () |
void | consumer_next () |
void | push_product (DataType item) |
void | pop_product (DataType *item) |
Private Attributes | |
DataType const | end_of_production_ |
terminator data (product == end_of_production_) indicates that production is completed. | |
DataType | buffer_ [BufferSize] |
ssize_t | num_product_in_buffer_ |
ssize_t | producer_index_ |
ssize_t | consumer_index_ |
Mutex | mutex_ |
PCondition | consumer_condition_ |
PCondition | producer_condition_ |
implementation of producer consumer model
Definition at line 103 of file PThreadUtil.h.
typedef ProducerConsumerModelContext<DataType, BufferSize> casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::_Context |
Definition at line 105 of file PThreadUtil.h.
casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::ProducerConsumerModelContext | ( | DataType const | terminator | ) | [inline] |
constructor
std::cout << "end_of_production = " << end_of_production_ << std::endl;
Definition at line 160 of file PThreadUtil.h.
casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::~ProducerConsumerModelContext | ( | ) | [inline] |
destructor
Definition at line 168 of file PThreadUtil.h.
bool casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::buffer_is_empty | ( | ) | [inline, private] |
Definition at line 212 of file PThreadUtil.h.
References casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::num_product_in_buffer_.
Referenced by casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::consume().
bool casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::buffer_is_full | ( | ) | [inline, private] |
Definition at line 208 of file PThreadUtil.h.
References casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::num_product_in_buffer_.
Referenced by casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::produce().
static void casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::complete_production | ( | _Context * | context | ) | [inline, static] |
it should be called when production complete
Definition at line 155 of file PThreadUtil.h.
References casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::end_of_production_, and casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::produce().
static bool casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::consume | ( | _Context * | context, | |
DataType * | item | |||
) | [inline, static] |
consumption function return false if no more products available otherwise return true
wait until something is produced
send a signal to consumer since there are available slot in buffer
Definition at line 131 of file PThreadUtil.h.
References casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::buffer_is_empty(), casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::consumer_next(), casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::consumer_wait(), casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::end_of_production_, casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::lock(), casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::pop_product(), casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::producer_signal(), and casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::unlock().
void casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::consumer_next | ( | ) | [inline, private] |
Definition at line 222 of file PThreadUtil.h.
References casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::consumer_index_, and casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::num_product_in_buffer_.
Referenced by casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::consume().
int casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::consumer_signal | ( | ) | [inline, private] |
Definition at line 204 of file PThreadUtil.h.
References casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::consumer_condition_, and casa::sdfiller::PCondition::signal().
Referenced by casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::produce().
int casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::consumer_wait | ( | ) | [inline, private] |
Definition at line 200 of file PThreadUtil.h.
References casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::consumer_condition_, and casa::sdfiller::PCondition::wait().
Referenced by casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::consume().
int casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::lock | ( | ) | [inline, private] |
Definition at line 180 of file PThreadUtil.h.
References casa::sdfiller::Mutex::lock(), and casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::mutex_.
Referenced by casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::consume(), casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::locked_print(), and casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::produce().
static void casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::locked_print | ( | T | msg, | |
_Context * | context | |||
) | [inline, static] |
utility
Definition at line 173 of file PThreadUtil.h.
References casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::lock(), and casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::unlock().
void casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::pop_product | ( | DataType * | item | ) | [inline, private] |
Definition at line 232 of file PThreadUtil.h.
References casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::buffer_, and casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::consumer_index_.
Referenced by casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::consume().
static void casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::produce | ( | _Context * | context, | |
DataType | item | |||
) | [inline, static] |
production function
wait until buffer becomes available for production
send a signal to consumer since something is produced
Definition at line 108 of file PThreadUtil.h.
References casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::buffer_is_full(), casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::consumer_signal(), casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::lock(), casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::producer_next(), casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::producer_wait(), casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::push_product(), and casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::unlock().
Referenced by casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::complete_production().
void casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::producer_next | ( | ) | [inline, private] |
Definition at line 216 of file PThreadUtil.h.
References casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::num_product_in_buffer_, and casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::producer_index_.
Referenced by casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::produce().
int casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::producer_signal | ( | ) | [inline, private] |
Definition at line 196 of file PThreadUtil.h.
References casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::producer_condition_, and casa::sdfiller::PCondition::signal().
Referenced by casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::consume().
int casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::producer_wait | ( | ) | [inline, private] |
Definition at line 192 of file PThreadUtil.h.
References casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::producer_condition_, and casa::sdfiller::PCondition::wait().
Referenced by casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::produce().
void casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::push_product | ( | DataType | item | ) | [inline, private] |
Definition at line 228 of file PThreadUtil.h.
References casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::buffer_, and casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::producer_index_.
Referenced by casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::produce().
int casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::try_lock | ( | ) | [inline, private] |
Definition at line 188 of file PThreadUtil.h.
References casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::mutex_, and casa::sdfiller::Mutex::try_lock().
int casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::unlock | ( | ) | [inline, private] |
Definition at line 184 of file PThreadUtil.h.
References casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::mutex_, and casa::sdfiller::Mutex::unlock().
Referenced by casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::consume(), casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::locked_print(), and casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::produce().
DataType casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::buffer_[BufferSize] [private] |
Definition at line 240 of file PThreadUtil.h.
Referenced by casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::pop_product(), and casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::push_product().
PCondition casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::consumer_condition_ [private] |
Definition at line 245 of file PThreadUtil.h.
Referenced by casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::consumer_signal(), and casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::consumer_wait().
ssize_t casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::consumer_index_ [private] |
Definition at line 243 of file PThreadUtil.h.
Referenced by casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::consumer_next(), and casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::pop_product().
DataType const casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::end_of_production_ [private] |
terminator data (product == end_of_production_) indicates that production is completed.
Definition at line 239 of file PThreadUtil.h.
Referenced by casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::complete_production(), and casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::consume().
Mutex casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::mutex_ [private] |
Definition at line 244 of file PThreadUtil.h.
Referenced by casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::lock(), casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::try_lock(), and casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::unlock().
ssize_t casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::num_product_in_buffer_ [private] |
Definition at line 241 of file PThreadUtil.h.
Referenced by casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::buffer_is_empty(), casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::buffer_is_full(), casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::consumer_next(), and casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::producer_next().
PCondition casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::producer_condition_ [private] |
Definition at line 246 of file PThreadUtil.h.
Referenced by casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::producer_signal(), and casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::producer_wait().
ssize_t casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::producer_index_ [private] |
Definition at line 242 of file PThreadUtil.h.
Referenced by casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::producer_next(), and casa::sdfiller::ProducerConsumerModelContext< DataType, BufferSize >::push_product().