int main(int argc, char** argv) { char* processName = argv[0]; string id_str; // Si se ingresan menos argumentos de los necesarios if (argc < 2) { string msg = "Usage "; msg = msg + processName + " <-amountOfItemsToProduce> \n"; Colors::writeerr(msg, RED); exit(EXIT_FAILURE); } int id = getpid(); Process::announce(PRODUCER_PROCESS_NAME, id, GREEN, "initializing."); srand(time(NULL) * id); int amountOfItemsToProduce = atoi(argv[1]); Store* store = (Store*) SharedMemory::get(SHARED_MEMORY_ID, sizeof(Store)); SemaphoreArray* producersSemaphore = SemaphoreArray::get(PRODUCERS_SEMAPHORE_ID); SemaphoreArray* consumersSemaphore = SemaphoreArray::get(CONSUMERS_SEMAPHORE_ID); for(int i = 0; i < amountOfItemsToProduce; i++){ consumersSemaphore->wait(); producersSemaphore->wait(); sleep(Process::sleepTime()); int newItem = Utils::generateRandomNumberBetween(1,5); store->item = newItem; if(i == amountOfItemsToProduce - 1) store->productionFinished = true; std::string newItemAnnouncement = "New Item: "+ Utils::intToString(newItem); Process::announce(processName, id, GREEN, newItemAnnouncement.c_str()); producersSemaphore->post(); consumersSemaphore->post(); } Process::announce(PRODUCER_PROCESS_NAME, id, UNDERLINEDGREEN, "finished."); return 0; }