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,15 +31,12 @@ 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) slot = i;
{ return slot;
slot = i;
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;
} }