首页 > 解决方案 > 生产者/消费者:1 个生产者,多个消费者 - 1 个信号量,1 个互斥体,1 个条件变量

问题描述

我正在用一些特定的标准在 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();

标签: cproducer-consumer

解决方案


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

首先阅读这里的线程安全缓冲队列实现。

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


推荐阅读