生产者消费者问题c语言_C中的生产者消费者问题

生产者消费者问题c语言

Here you will learn about producer consumer problem in C.

在这里,您将了解C语言中的生产者消费者问题。

Producer consumer problem is also known as bounded buffer problem. In this problem we have two processes, producer and consumer, who share a fixed size buffer. Producer work is to produce data or items and put in buffer. Consumer work is to remove data from buffer and consume it. We have to make sure that producer do not produce data when buffer is full and consumer do not remove data when buffer is empty.

生产者使用者问题也称为有界缓冲区问题。 在这个问题中,我们有两个过程,生产者和消费者,它们共享一个固定大小的缓冲区。 生产者的工作是生产数据或项目并放入缓冲区。 消费者的工作是从缓冲区中删除数据并使用它。 我们必须确保当缓冲区已满时生产者不会产生数据,而当缓冲区为空时使用者不会删除数据。

Also Read: Banker’s Algorithm in C

另请参阅: C语言中的银行家算法

The producer should go to sleep when buffer is full. Next time when consumer removes data it notifies the producer and producer starts producing data again. The consumer should go to sleep when buffer is empty. Next time when producer add data it notifies the consumer and consumer starts consuming data. This solution can be achieved using semaphores.

当缓冲区已满时,生产者应进入睡眠状态。 下次消费者删除数据时,它将通知生产者,然后生产者再次开始生产数据。 当缓冲区为空时,消费者应入睡。 生产者下一次添加数据时,会通知消费者,消费者开始使用数据。 可以使用信号量实现此解决方案。

producer consumer problem in c

Image Source

图片来源

C中的生产者消费者问题 (Producer Consumer Problem in C)

Below is the program to implement this problem.

下面是实现此问题的程序。

#include<stdio.h>
#include<stdlib.h>
 
int mutex=1,full=0,empty=3,x=0;
 
int main()
{
	int n;
	void producer();
	void consumer();
	int wait(int);
	int signal(int);
	printf("\n1.Producer\n2.Consumer\n3.Exit");
	while(1)
	{
		printf("\nEnter your choice:");
		scanf("%d",&n);
		switch(n)
		{
			case 1:	if((mutex==1)&&(empty!=0))
						producer();
					else
						printf("Buffer is full!!");
					break;
			case 2:	if((mutex==1)&&(full!=0))
						consumer();
					else
						printf("Buffer is empty!!");
					break;
			case 3:
					exit(0);
					break;
		}
	}
	
	return 0;
}
 
int wait(int s)
{
	return (--s);
}
 
int signal(int s)
{
	return(++s);
}
 
void producer()
{
	mutex=wait(mutex);
	full=signal(full);
	empty=wait(empty);
	x++;
	printf("\nProducer produces the item %d",x);
	mutex=signal(mutex);
}
 
void consumer()
{
	mutex=wait(mutex);
	full=wait(full);
	empty=signal(empty);
	printf("\nConsumer consumes item %d",x);
	x--;
	mutex=signal(mutex);
}

Output

输出量

1.Producer 2.Consumer 3.Exit Enter your choice:1

1. 生产者2. 消费者 3. 退出 输入您的选择:1

Producer produces the item 1 Enter your choice:2

生产者生产项目1 输入您的选择:2

Consumer consumes item 1 Enter your choice:2 Buffer is empty!! Enter your choice:1

消费者消费项目1 输入您的选择:2 缓冲区为空! 输入您的选择:1

Producer produces the item 1 Enter your choice:1

生产者生产项目1 输入您的选择:1

Producer produces the item 2 Enter your choice:1

生产者生产项目2 输入您的选择:1

Producer produces the item 3 Enter your choice:1 Buffer is full!! Enter your choice:3

生产者生产项目3 输入您的选择:1 缓冲区已满! 输入您的选择:3

翻译自: https://www.thecrazyprogrammer.com/2016/09/producer-consumer-problem-c.html

生产者消费者问题c语言

  • 11
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值