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 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;
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user