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.