diff --git a/src/producer.c b/src/producer.c index a28fba8..ee24dba 100644 --- a/src/producer.c +++ b/src/producer.c @@ -31,15 +31,12 @@ int main(int argc, char* argv[]) int GetNextFreeSlot(SharedStruct* sharedMem) { int slot = -1; - while(1) + for (int i = 0; i < 10; i++) { - for (int i = 0; i < 10; i++) + if (sharedMem->buffer[i] == -1) { - if (sharedMem->buffer[i] == -1) - { - slot = i; - return slot; - } + slot = i; + return slot; } } return slot; @@ -76,5 +73,13 @@ int produce_item(void) // Insert a number into the shared memory. void insert_item(int item, SharedStruct* sharedMem) { - sharedMem->buffer[GetNextFreeSlot(sharedMem)] = item; + int slot = GetNextFreeSlot(sharedMem); + while(slot < 0) + { + sem_post(&sharedMem->mutex); + sem_wait(&sharedMem->mutex); + slot = GetNextFreeSlot(sharedMem); + } + sharedMem->buffer[slot] = item; + return; } \ No newline at end of file