27 lines
1004 B
C++
27 lines
1004 B
C++
#include "consumer.h"
|
|
|
|
template<typename T> QSemaphore Consumer<T>::numProducts;
|
|
template<typename T> Monitor<T> *Consumer<T>::mon;
|
|
template<> void (*Consumer<int>::consume)(int, int) = NULL;
|
|
|
|
//---------------------------------------
|
|
template<typename T> void Consumer<T>::initClass(int numP, Monitor<T> *m, void (*cons)(T, int)) {
|
|
numProducts.release(numP);
|
|
mon = m;
|
|
consume = cons;
|
|
}
|
|
//---------------------------------------
|
|
|
|
//Semaphore with Number of Resources -> consume N Resources
|
|
//get spot of item in queue, take item, activate producers
|
|
//process item
|
|
template<typename T> void Consumer<T>::run() {
|
|
while (numProducts.tryAcquire()) { // While not all numProducts are consumed:
|
|
T* aux = mon->canGet(); // Get pointer to item in itemQ
|
|
T item = *aux; // Take the item out of itemQ
|
|
mon->doneGetting(aux); // Give info to producer threads
|
|
(*consume)(item,ID); // Consume one item
|
|
}
|
|
}
|
|
//---------------------------------------
|