【问题标题】:Producer / Consumer Solution生产者/消费者解决方案
【发布时间】:2016-08-08 19:24:14
【问题描述】:

我正在使用信号量实现生产者消费者问题的解决方案,并且到目前为止已经开发了实现生产者和消费者的代码。

#define N 100               
typedef int semaphore;
semaphore mutex = 1;
semaphore empty = N;
semaphore full = 0;
void producer(void)
{
    int item;
    while (TRUE)
    {
        produce_item(&item);
        down(&empty);
        down(&mutex);
        enter_item(item);
        up(&mutex);
        up(&full);
    }
}
void consumer(void)
{
    int item;
    while (TRUE)
    {
        down(&full);
        down(&mutex);
        remove_item(&item);
        up(&mutex);
        up(&empty);
        consume_item(item);
    }
}

我正在努力思考如何实现每次生产/消费物品时打印数字的 main。

任何帮助将不胜感激

【问题讨论】:

  • 请缩进你的代码
  • 启动一些生产者线程,(可能循环一些指针/什么和睡眠调用的 PC 队列推送)和一些消费者线程,(可能循环一个队列弹出和 printf 接收指针/什么) .

标签: c operating-system semaphore producer-consumer


【解决方案1】:

我建议在调用 enter_itemremove_item 之后打印消息。这个问题最好使用线程来解决,但是对于您的实现,请尝试生成“x”数量的项目(直到它满了),然后让消费者消费它们。

【讨论】:

  • 那么只是在enter_item和remove_item之后插入printf语句的情况吗?所以:
  • 对于印刷部分,我认为是的。你得到你输入/删除的数字,并用合适的消息打印它,比如“项目x生产并添加到N的堆栈”或“x项目生产出N。你做同样的事情对于已删除的项目。
  • 虽然,至于主要部分,想想吧。生产者/消费者问题的一个重点是确保如果缓冲区已满,生产者不会添加项目,如果缓冲区为空,消费者不会尝试从中删除数据。考虑到这一点,举例说明一些可能的结果,无论好坏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-18
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多