使用条件变量在C中的1个生产者N消费者队列

时间:2015-12-15 22:23:15

标签: multithreading concurrency posix mutex producer-consumer

我正在为我的操作系统考试做一个项目。图片是我有一个过程分为:

  • 1个推送队列中消息的线程生成器。
  • n线程消费者从队列头部弹出消息。
  • 1个线程收集器,它告诉生产者生成另一组任务。

我在伪代码中的初始设计是这样的(如果你需要真正的代码我可以使用Makefile和所有标题制作.tar。)。

  • 生产者

    while(1) {
    
        pushTasks();  /* push messages in the queue */
    
        waitCollector(); /* wait on a CV the signal of the collector */
    
        broadcastToWorkers(); /* tells to all workers to start a new elaboration */
    }
    
  • 所有消费者都

    while(1) 
    {
        while(1)
        {
            popTask();
            doTask();
            if(message of end of stream) break;
        }
        signalToCollector(); /* increment a count and signal on a CV */
        waitProducer(); /* wait signal from producer to restart the elaboration */
    }
    
  • 收藏家,它必须同步时间(想象所有任务完成后每个时间单位都会发生)

    while(1) {
        doStuff();
        waitWorkers(); /* each worker increments a count when it's done... */
        signalToProducer(); /* tells the producer to generate new tasks*/
    }
    
但是我在某个地方遇到了僵局。你知道我应该使用多少互斥和条件变量吗?使每个帖子执行pthread_cond_signalpthread_cond_wait的条件是什么?

0 个答案:

没有答案