Step by step displays the content, and the final result of the list ("buffer") of 6 elements as the initial values ??and the following elements which are produced (NEXTP) or consumed (NEXTC). This scheme allows a maximum of (Buffer_size - 1) elements.
#define BUFFER_SIZE 6
typedefstruct { ....}item;
item buffer[BUFFER_SIZE];
int in = 0;
int out = 0;
Producer
itemnextProduced;
while (true)
{.../* produce an item in nextp */
while (((in + 1) % BUFFER_SIZE ) = = out)
/* loop, do nothing */;
buffer[in] = nextp;
in = (in + 1) % BUFFER_SIZE;
}
Consumer
itemnextConsumed
while (true)
{...
while ( in = = out) ; /* loop, do nothing */;
nextc = buffer [out];
out = (out + 1) % BUFFER_SIZE;
/* consume the item in nextc */
}