Fixed bug with over 10 Producers

This commit is contained in:
TriantaTV 2022-10-15 23:08:00 -05:00
parent e920516382
commit 581134a3a0

View File

@ -31,8 +31,6 @@ int main(int argc, char* argv[])
int GetNextFreeSlot(SharedStruct* sharedMem) int GetNextFreeSlot(SharedStruct* sharedMem)
{ {
int slot = -1; 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)
@ -41,7 +39,6 @@ int GetNextFreeSlot(SharedStruct* sharedMem)
return slot; return slot;
} }
} }
}
return slot; return slot;
} }
@ -76,5 +73,13 @@ int produce_item(void)
// Insert a number into the shared memory. // Insert a number into the shared memory.
void insert_item(int item, SharedStruct* sharedMem) 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;
} }