|
|
| RingBuffer.h |
template<class Token>
class RingBuffer {
public:
// constructors and destructors
RingBuffer(unsigned int size);
~RingBuffer();
// mutators
void add(Token& token);
Token get();
private:
std::vector<Token> buffer;
unsigned int filled; // # of objects in the buffer
unsigned int in; // next token is stored here
unsigned int out; // next token is taken from here
pthread_mutex_t mutex;
pthread_cond_t nonEmpty;
pthread_cond_t nonFull;
}; // class RingBuffer
|
![]() | Ring buffers are frequently used for
concurrent producer/consumer relationships.
|
![]() | mutex is used to assure mutual exclusion
if the data members are accessed.
|
![]() | nonEmpty and nonFull are used to
signal that a stack is no longer empty (for
waiting consumers) or that a stack is no longer
full (for waiting producers), respectively.
|
|
| Copyright © 2001, 2002 Andreas Borchert, converted to HTML on February 21, 2002 |