博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
生产者消费者问题c语言_C中的生产者消费者问题
阅读量:2510 次
发布时间:2019-05-11

本文共 2684 字,大约阅读时间需要 8 分钟。

生产者消费者问题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: 

另请参阅:

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

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

Below is the program to implement this problem.

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

#include
#include
 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

翻译自:

生产者消费者问题c语言

转载地址:http://hrggb.baihongyu.com/

你可能感兴趣的文章
DRM-内容数据版权加密保护技术学习(中):License预发放实现 (转)
查看>>
TCP与UDP协议
查看>>
php上传文件如何保证上传文件不被改变或者乱码
查看>>
目录遍历代码
查看>>
iOS MD5加密实现方法
查看>>
cygwin下的目录软连接
查看>>
eclipse控制台不显示输出的解决办法
查看>>
Java中的TCP/UDP网络通信编程
查看>>
Mysql支持的数据类型(总结)
查看>>
对测试转开发的一些想法
查看>>
MVC文件上传08-使用客户端jQuery-File-Upload插件和服务端Backload组件让每个用户有专属文件夹...
查看>>
html模板中调用变量
查看>>
应用程序缓存的应用(摘抄)
查看>>
C#析构函数,类运行结束后运行
查看>>
在LAMP的生产环境内添加PHP的cURL扩展模块
查看>>
AMH 软件目录介绍
查看>>
你可能使用了Spring最不推荐的注解方式
查看>>
java常见3种文件上传速度对比和文件上传方法详细代码
查看>>
SVD总结
查看>>
python基础教程(三)
查看>>