Bin is a low bounded (token number >= 0) token abstract resource for synchronising Process objects. A process is blocked in take() if the requested number of token is greater than the available number of token. It is reactivated when enough token are given (back) to the resource. If multiple processes are waiting for reactivation process-priority and FIFO-strategy are used to choose the process. Bin is generally used for producer and consumer synchronisation.
Public Member Functions | |
Bin (Simulation *s, Label l, unsigned int startTokenNumber, BinObserver *o=0) | |
Construction. | |
~Bin () | |
Destruction. | |
const std::list< Process * > & | getWaitingProcessList () const |
Get list of blocked processes. | |
virtual Trace * | getTrace () const |
Get pointer to trace. | |
virtual void | report (Report *r) |
Generate report. | |
Token management | |
unsigned int | take (unsigned int n) |
Take n token. | |
void | give (unsigned int n) |
Give n token. | |
unsigned | getTokenNumber () const |
Number of tokens available. | |
Statistics | |
virtual void | reset () |
reset statistics | |
unsigned int | getUsers () const |
Number of takes. | |
unsigned int | getProviders () const |
Number of gives. | |
unsigned int | getInitial () const |
Initial number of token. | |
unsigned int | getMin () const |
Min number of token. | |
unsigned int | getMax () const |
Max number of token. | |
double | getAVFreeToken () const |
Average free token. | |
double | getAVWaitTime () const |
Average waiting time. | |
Static Public Attributes | |
Trace MarkTypes | |
These MarkTypes and Tags are used to trace Bin events. A TraceConsumer can use these constants to identify trace events send by Bin. | |
const MarkTypeId | baseMarkId = 1000 |
const MarkType | markCreate = MarkType("create", baseMarkId+1, typeid(Bin)) |
const MarkType | markDestroy = MarkType("destroy", baseMarkId+2, typeid(Bin)) |
const MarkType | markTakeFail = MarkType("takeFail", baseMarkId+10, typeid(Bin)) |
const MarkType | markTakeSucceed = MarkType("takeSucceed", baseMarkId+11, typeid(Bin)) |
const MarkType | markGive = MarkType("give", baseMarkId+12, typeid(Bin)) |
const MarkType | markChangeTokenNumber = MarkType("changeTokenNumber", baseMarkId+20, typeid(Bin)) |
const TagId | baseTagId = 1000 |
const Tag | tagCurrent = Tag(baseTagId+1) |
const Tag | tagTokenNumber = Tag(baseTagId+2) |
|
Construction.
|
|
Take
Takes |
|
Give
Gives |