随笔 - 13, 文章 - 18, 评论 - 18, 引用 - 0
数据加载中……

生产者消费者问题

请编写一个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);
   }
}

posted on 2007-02-03 10:18 JackLi 阅读(490) 评论(0)  编辑 收藏 引用 所属分类: Examination


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理