#include "producer.h" //--------------------------------------- template QSemaphore Producer::numProducts; template Monitor * Producer::mon; template<> int (*Producer::produce)(int) = NULL; //--------------------------------------- template void Producer::initClass(int numP, Monitor *m, T(*prod)(int)) { mon = m; numProducts.release(numP); produce = prod; } //--------------------------------------- //Semaphore with Number of Resources -> create N Resources //produce item -> get spot in queue -> put item into second queue //activate consumers template void Producer::run() { while (numProducts.tryAcquire()) { // While not all numProducts items are produced: T item = (*produce)(ID); // Produce one item T* aux = mon->canPut(); // Get place for item in emptySpotsQ *aux = item; // Put item into emptySpotsQ mon->donePutting(aux); // Give info to consumer threads } } //---------------------------------------