#include "consumer.h" template QSemaphore Consumer::numProducts; template Monitor *Consumer::mon; template<> void (*Consumer::consume)(int, int) = NULL; //--------------------------------------- template void Consumer::initClass(int numP, Monitor *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 void Consumer::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 } } //---------------------------------------