生产者/消费者:1个生产者,多个消费者-1个信号量,1个互斥量,1个条件变量

时间:2018-11-22 06:28:31

标签: c producer-consumer

我正在使用某些特定条件在C中实现生产者/消费者问题:

  1. 1个生产者,多个消费者
  2. 仅使用一个互斥量,一个信号量,一个条件变量
  3. 所有消费者都必须消费(如广播),然后,当生产者生产的所有产品都已经被消费者消费时,生产者将生产更多。

我不知道如何仅根据上面的标准使用我应该实现的方式。

这是我仅使用3个互斥锁编写的伪代码,我无法根据条件进行操作。

任何帮助将不胜感激,我不知道如何在这里仅使用一个互斥锁,在其中放置信号灯和条件变量。

  

伪代码:

     

作家:

glock();  //lock from reader

write_lock(); //wait till there is no readers

//write the data

write_unlock();

g_unlock();
     

读者:

g_lock();  //so reader can't read when writer locked g and writting
g_unlock();

read_lock();
reader++;
if (reader == 1)
    write_lock();   ///all consumers have consume 

//read the data

read_lock();
reader--;
if (reader == 0)
    write_unlock();
read_lock();

1 个答案:

答案 0 :(得分:0)

这里是使用1个互斥锁和两个条件变量的解决方案,它们可以支持多个生产者-消费者。伪代码在c ++中

首先阅读线程安全缓冲区队列实现here

然后检查生产者消费者解决方案https://codeistry.wordpress.com/2018/03/09/unordered-producer-consumer/