Fixed bug with over 10 Producers
This commit is contained in:
parent
e920516382
commit
581134a3a0
@ -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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user