#include #include #include #include #include "shared.h" void StartConsumer(SharedStruct* sharedMem); void Consume(SharedStruct* sharedMem); void consume_item(int item, SharedStruct* sharedMem); int remove_item(SharedStruct* sharedMem); int main(int argc, char* argv[]) { if (argc != 2) { fprintf(stderr, "Usage: %s SharedID# \n", argv[0]); exit(1); } int sharedID = StringToNumber(argv[1]); SharedStruct* sharedMem = shmat(sharedID, NULL, 0); StartConsumer(sharedMem); return 0; } // Consumer main function // TODO: Add waiting for one consumer at a time // Add ability to use shared memory void StartConsumer(SharedStruct* sharedMem) { for (int i = 0; i < 5; i++) { sem_wait(&sharedMem->full); Consume(sharedMem); sem_post(&sharedMem->empty); } } void Consume(SharedStruct* sharedMem) { int consumeNum; sem_wait(&sharedMem->mutex); consumeNum = remove_item(sharedMem); consume_item(consumeNum, sharedMem); printf("%d was consumed.\n", consumeNum); sem_post(&sharedMem->mutex); return; } // Manage item taken from shared memory void consume_item(int item, SharedStruct* sharedMem) { sharedMem->count[item]++; return; } // Take item out of shared memory int remove_item(SharedStruct* sharedMem) { int item = sharedMem->buffer[0]; sharedMem->buffer[0] = -1; return item; }