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().
1.6.1