具有监控信号量的生产者/消费者

时间:2016-05-06 20:53:00

标签: c multithreading posix monitoring semaphore

我想通过使用监控线程解决生产者消费者问题。 基本上,当我们尝试解决这个问题时,我们可以通过使用信号量和互斥量轻松解决它(信号量检测空或满状态保持稳定的临界区,而互斥量保持共享部分,生产者生产,消费者消费)

在这个问题中,我想使用监视线程来检查共享内存中有多少项,并且该线程必须在生产者或消费者完成工作后进入关键部分。这是一种承认的事情

例如

农产品 Ack,缓冲区有1项

消费 确认,缓冲区有0项

农产品 Ack,缓冲区有1项

农产品 确认,缓冲区有2项

我在考虑再使用两个sem_t,

sem_t m1;
sem_t m2;

Void *produce()
{
  sem_wait(&m1);
  sem_wait(&m2);
  ....
  sem_signal(&m1);

}
Void *consumer()
{
  sem_wait(&m1);
  sem_wait(&m2);
  ....
  sem_signal(&m2);
}

Void *monitor()
{
   if(m1==o && m2==1)
   sem_wait();
   else if(m1==1 && m2==0)
   sem_wait(m1);
  ....
  sem_signal(m1);
  sem_signal(m2);
}
只有当m1和m2都大于0时,生产者和消费者才能进入关键部分,当他们完成任务时,他们只需要为m1或m2调用sem_signal一次。这个块生成器和消费者,只有监视线程才能进入临界区。监控线程完成自己的任务后,调用sem_signal为m1,m2,然后生产者或者消费者可以进入临界区(每个sem对象都是互斥,二进制信号量)

但它不起作用.. 我找不到我的问题。 Sem对象是不是可以使用if语句? 或者,我的想法有问题吗?

感谢阅读我的长篇文章

0 个答案:

没有答案