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 slot = -1;
while(1)
{
for (int i = 0; i < 10; i++)
{
if (sharedMem->buffer[i] == -1)
@ -41,7 +39,6 @@ int GetNextFreeSlot(SharedStruct* sharedMem)
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;
}