diff --git a/supervisor.c b/supervisor.c index bcae659..880e8d3 100644 --- a/supervisor.c +++ b/supervisor.c @@ -29,9 +29,6 @@ void usage(void) void initCircBuf() { - shared->validItems = 0; - shared->head = 0; - shared->tail = 0; shared->quit = 0; for (int i = 0; i < MAX_ITEMS; i++) { shared->data[i] = 0; @@ -47,16 +44,16 @@ int isEmpty() return 0; } -int getItem() +int getSolution(sem_t sUsedSpace, sem_t sFreeSpace, int *solution) { - if (isEmpty()) - return -1; - + sem_wait(&sUsedSpace); + int value; - + value = shared->data[shared->head]; shared->head = (shared->head + 1) % MAX_ITEMS; - shared->validItems--; + + sem_post(&sFreeSpace); return value; } @@ -95,6 +92,8 @@ int main(int argc, char *argv[]) initCircBuf(); while (quit == 0) { + int solution[MAX_ITEMS] = {-1}; + getSolution(*sUsedSpace, *sFreeSpace, solution); }