From 581134a3a0cc01e6798877ed0b54f8ab398a72a6 Mon Sep 17 00:00:00 2001 From: TriantaTV Date: Sat, 15 Oct 2022 23:08:00 -0500 Subject: [PATCH] Fixed bug with over 10 Producers --- src/producer.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) 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