请编写一个Producer线程和一个Consumer线程,两个线程共享着一个固定长度的缓冲区和该缓冲区上的一个读写索引index。 Producer负责把一些随即数放到缓冲区里,Consumer则负责删除这些随即数。请用C语言中的信号量来实现这个问题。
static int index =0;
static int buffer[8];
static Semaphone bufferWrite;
static Semaphone bufferNotFull;
static Semaphone bufferNotEmpty;
void Init()
{
bufferWrite = newSemaphone(1);
bufferNotFull= newSemaphone(8);
bufferNotEmpty= newSemaphone(0);
}
void Producer(void)
{
while(1)
{
wait(bufferNotFull);
wait(bufferWrite);
buffer[index]=rand();
index++;
signal(bufferWrite);
signal(bufferNotEmpty);
}
}
void Consumer()
{
while(1)
{
wait(bufferNotEmpty);
wait(bufferWrite);
printf("%d \n", buffer[index]);
index--;
signal(bufferWrite);
signal(bufferNotFull);
}
}