C 生产者/消费者解决方案

C 生产者/消费者解决方案,c,operating-system,semaphore,producer-consumer,C,Operating System,Semaphore,Producer Consumer,我正在使用信号量实现生产者-消费者问题的解决方案,到目前为止,我已经开发了这段代码,实现了生产者和消费者 #define N 100 typedef int semaphore; semaphore mutex = 1; semaphore empty = N; semaphore full = 0; void producer(void) { int item; while (TRUE) { produce_item(&am

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

#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,它在每次生产/消费商品时都会打印数字


如果您有任何帮助,我们将不胜感激。

我建议您在拨打enter_item和remove_item后打印邮件。此问题最好使用线程解决,但对于您的实现,请尝试生成“x”数量的项目(尽管项目已满),然后让消费者消费它们。

请缩进代码启动一些生产者线程,可能在PC队列中循环推送一些指针/任何东西和睡眠调用,以及一些消费者线程,也许循环一个队列pop和printf接收的指针/无论什么。那么,这只是在enter_item和remove_item之后插入printf语句的情况吗?所以:对于印刷部分,我认为是的。您将获得输入/删除的编号,并使用适当的消息(如生成的项目x)打印该编号,并将其添加到N个或从N个项目中生成的x个项目的堆栈中。对于删除的项目也可以这样做。不过,对于主要部分,请考虑一下。生产者/消费者问题的一点是确保生产者不会在缓冲区已满时添加项目,消费者不会在缓冲区为空时尝试从中删除数据。考虑到这一点,举例说明一些可能的结果,无论是好的还是坏的。