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

C 生产者/消费者:1个生产者,多个消费者-1个信号量,1个互斥,1个条件变量,c,producer-consumer,C,Producer Consumer,我用一些特定的标准在C中实现生产者/消费者问题: 一个生产者,多个消费者 仅使用一个互斥、一个信号量和一个条件变量 所有消费者都必须消费(就像广播),然后,当生产者生产的所有产品都已经被消费者消费时,生产者将生产更多的产品 我不知道如何实现它,只使用我应该根据上述标准 这里是我只使用3个互斥体编写的伪代码,我不能根据标准来编写 任何帮助都将不胜感激,我不知道如何在这里使用一个互斥,在哪里放置信号量和条件变量 伪代码: 作者: glock(); //lock from reader write

我用一些特定的标准在C中实现生产者/消费者问题:

  • 一个生产者,多个消费者
  • 仅使用一个互斥、一个信号量和一个条件变量
  • 所有消费者都必须消费(就像广播),然后,当生产者生产的所有产品都已经被消费者消费时,生产者将生产更多的产品
  • 我不知道如何实现它,只使用我应该根据上述标准

    这里是我只使用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();
    
    阅读器:

    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个互斥和两个条件变量的解决方案,可以支持多个生产者和消费者。伪代码是用c编写的++

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

    然后检查生产者-消费者解决方案