// // Created by Ben Bergkamp on 1/25/18. // #include "ProducerConsumerQueue.h" template <class T> void ProducerConsumerQueue<T>::Push(T obj) { pthread_mutex_lock(&m); queue.push(obj); if(queue.size() == 1) { pthread_cond_signal(&consumer_cv); } pthread_mutex_unlock(&m); } template <class T> T ProducerConsumerQueue<T>::Pop() { pthread_mutex_lock(&m); while(queue.empty() == true) { pthread_cond_wait(&consumer_cv, &m); } T front = queue.front(); queue.pop(); pthread_mutex_unlock(&m); return front; } template <class T> size_t ProducerConsumerQueue<T>::Size() { pthread_mutex_lock(&m); size_t size = queue.size(); pthread_mutex_unlock(&m); return size; }