MiniBachelor
Öffentliche Methoden | Private Attribute | Aufstellung aller Elemente
Buffer< ELEMENTTYPE > Template-Klassenreferenz

#include <Buffer.hpp>

Öffentliche Methoden

 Buffer ()
 
virtual ~Buffer ()
 
ELEMENTTYPE pop ()
 
void push (ELEMENTTYPE ele)
 

Private Attribute

deque< ELEMENTTYPE > _values
 
Semaphore_filled
 
mutex _mu
 

Ausführliche Beschreibung

template<typename ELEMENTTYPE>
class Buffer< ELEMENTTYPE >

Das ist ein Bounded-Buffer. Sollte die Semaphore mit ->P() auf die Zahl 0 herunter gezählt worden sein, blockiert die Methode pop(). In dem Fall sind in der "Queue" auch keine Elemente, die entfernt werden können. Beim push() wird mit ->V() die Semaphore wieder raufgezählt, da zuvor ein Element in die Queue abgelegt wurde. Weil mehrere Threads gleichzeitig zugriff auf den Buffer haben, könnte pop() und push() zeitgleich stattfinden. Um beim Lesen und Scheiben auf den Queue keine Probleme zu bekommen (Stichwort: thread-safe) ist dieser Zugriff bzw. der kritische Abschnitt mit einer Mutex-Semaphore gesichert.

Beschreibung der Konstruktoren und Destruktoren

template<typename ELEMENTTYPE >
Buffer< ELEMENTTYPE >::Buffer ( )
inline
30  {
31  _filled = new Semaphore(0);
32  }
Definition: Semaphore.hpp:6
Semaphore * _filled
Definition: Buffer.hpp:25
template<typename ELEMENTTYPE >
virtual Buffer< ELEMENTTYPE >::~Buffer ( )
inlinevirtual
35  {
36  delete _filled;
37  }
Semaphore * _filled
Definition: Buffer.hpp:25

Dokumentation der Elementfunktionen

template<typename ELEMENTTYPE >
ELEMENTTYPE Buffer< ELEMENTTYPE >::pop ( )
inline
40  {
41  _filled->P(); // blockieren, wenn leer
42  _mu.lock(); // start: kritischer Abschnitt -------.
43  ELEMENTTYPE _return; // |
44  _return = _values.back(); // |
45  _values.pop_back(); // |
46  _mu.unlock(); // ende: kritischer Abschnitt ------'
47  return _return;
48  }
Semaphore * _filled
Definition: Buffer.hpp:25
mutex _mu
Definition: Buffer.hpp:26
void P()
Definition: Semaphore.hpp:20
deque< ELEMENTTYPE > _values
Definition: Buffer.hpp:24
template<typename ELEMENTTYPE >
void Buffer< ELEMENTTYPE >::push ( ELEMENTTYPE  ele)
inline
51  {
52  _mu.lock(); // start: kritischer Abschnitt ------.
53  _values.push_back(ele); // |
54  _mu.unlock(); // ende: kritischer Abschnitt -----'
55  _filled->V(); // freigeben
56  }
Semaphore * _filled
Definition: Buffer.hpp:25
mutex _mu
Definition: Buffer.hpp:26
void V()
Definition: Semaphore.hpp:15
deque< ELEMENTTYPE > _values
Definition: Buffer.hpp:24

Dokumentation der Datenelemente

template<typename ELEMENTTYPE >
Semaphore* Buffer< ELEMENTTYPE >::_filled
private
template<typename ELEMENTTYPE >
mutex Buffer< ELEMENTTYPE >::_mu
private
template<typename ELEMENTTYPE >
deque<ELEMENTTYPE> Buffer< ELEMENTTYPE >::_values
private

Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Datei: