求用c语言实现消费者和生产者的问题,简单点,就用一个生产者和一个消费者的两进程同步算法,谢谢啦各位

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求用c语言实现消费者和生产者的问题,简单点,就用一个生产者和一个消费者的两进程同步算法,谢谢啦各位相关的知识,希望对你有一定的参考价值。

参考技术A #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);

用C语言编写程序:生产者和消费者之间实现同步与互斥问题

程序尽量设计简单短小易懂,如有说明更好..希望会的朋友多多帮助.小弟把分全送上...
我学文的,一个朋友叫我帮他找的。你能帮做的话你就假设下是一个消费者和一个生产者吧,题目没有规定..

//整个程序以伪代码形式给出,当做一个提示吧,这样你同学就应该有思路了
//程序中有注释部分和需要他自己完善的部分,我给的是框架
//老师只是要求用C程序模拟这个机制来实现,就是通过你所学的知识模拟一个效果即可
//利用P,V操作使得在同一时刻,生产者和消费者只能有一个对存储区操作(即临界区)。
//如果两者同时对存储区操作,即同时取和生产的话,必定会有一个等待,当另一个完成操作后自己才会被唤醒。
//生产者在存储区满时不能再生产,进入等待,消费者同理
//完成同步互斥效果
//希望对你朋友有启发

/*----以下为代码部分-----*/

//定义全局变量
int empty = 1;//信号量表示存储单元空,可以生产产品
int full = 0;//信号量表示存储单元空,不可以消费产品

//P操作
void P(int &mutex)

*mutex--;
if(*mutex<0)

//当前进程挂起的程序实现



//V操作
void V(int &mutex)

*mutex++;
if(*mutex <=0)

//唤醒等待中的进程程序实现



//生产者程序
void producer()

P(& empty);//若此时存储区空,则可以生产,否则程序挂起等待

//生产一个产品操作

V(&full);//通知消费者进程,可以取产品



//消费者程序
void consumer()
P(&full);//若此时存储区不空,则可以取产品,否则消费者程序挂起等待

//取走一个产品操作

V(& empty);//通知生产者进程可以生产


//主函数
void main()

//分别调用生产者,消费者程序,顺序不限,因为已经完成信号量的同步,若发生同步问题就会等待

producer();
consumer();
consumer();
producer();

………………

参考技术A //整个程序以伪代码形式给出,当做一个提示吧,这样你同学就应该有思路了
//程序中有注释部分和需要他自己完善的部分,我给的是框架
//老师只是要求用C程序模拟这个机制来实现,就是通过你所学的知识模拟一个效果即可
//利用P,V操作使得在同一时刻,生产者和消费者只能有一个对存储区操作(即临界区)。
//如果两者同时对存储区操作,即同时取和生产的话,必定会有一个等待,当另一个完成操作后自己才会被唤醒。
//生产者在存储区满时不能再生产,进入等待,消费者同理
//完成同步互斥效果
//希望对你朋友有启发
/*----以下为代码部分-----*/
//定义全局变量
int
empty
=
1;//信号量表示存储单元空,可以生产产品
int
full
=
0;//信号量表示存储单元空,不可以消费产品
//P操作
void
P(int
&mutex)

*mutex--;
if(*mutex<0)

//当前进程挂起的程序实现


//V操作
void
V(int
&mutex)

*mutex++;
if(*mutex
<=0)

//唤醒等待中的进程程序实现


//生产者程序
void
producer()

P(&
empty);//若此时存储区空,则可以生产,否则程序挂起等待
//生产一个产品操作
V(&full);//通知消费者进程,可以取产品

//消费者程序
void
consumer()
P(&full);//若此时存储区不空,则可以取产品,否则消费者程序挂起等待
//取走一个产品操作
V(&
empty);//通知生产者进程可以生产

//主函数
void
main()

//分别调用生产者,消费者程序,顺序不限,因为已经完成信号量的同步,若发生同步问题就会等待
producer();
consumer();
consumer();
producer();
………………
参考技术B //整个程序以伪代码形式给出,当做一个提示吧,这样你同学就应该有思路了
//程序中有注释部分和需要他自己完善的部分,我给的是框架
//老师只是要求用C程序模拟这个机制来实现,就是通过你所学的知识模拟一个效果即可
//利用P,V操作使得在同一时刻,生产者和消费者只能有一个对存储区操作(即临界区)。
//如果两者同时对存储区操作,即同时取和生产的话,必定会有一个等待,当另一个完成操作后自己才会被唤醒。
//生产者在存储区满时不能再生产,进入等待,消费者同理
//完成同步互斥效果
//希望对你朋友有启发
/*----以下为代码部分-----*/
//定义全局变量
int
empty
=
1;//信号量表示存储单元空,可以生产产品
int
full
=
0;//信号量表示存储单元空,不可以消费产品
//P操作
void
P(int
&mutex)

*mutex--;
if(*mutex<0)

//当前进程挂起的程序实现


//V操作
void
V(int
&mutex)

*mutex++;
if(*mutex
<=0)

//唤醒等待中的进程程序实现


//生产者程序
void
producer()

P(&
empty);//若此时存储区空,则可以生产,否则程序挂起等待
//生产一个产品操作
V(&full);//通知消费者进程,可以取产品

//消费者程序
void
consumer()
P(&full);//若此时存储区不空,则可以取产品,否则消费者程序挂起等待
//取走一个产品操作
V(&
empty);//通知生产者进程可以生产

//主函数
void
main()

//分别调用生产者,消费者程序,顺序不限,因为已经完成信号量的同步,若发生同步问题就会等待
producer();
consumer();
consumer();
producer();
………………
参考技术C //整个程序以伪代码形式给出,当做一个提示吧,这样你同学就应该有思路了
//程序中有注释部分和需要他自己完善的部分,我给的是框架
//老师只是要求用C程序模拟这个机制来实现,就是通过你所学的知识模拟一个效果即可
//利用P,V操作使得在同一时刻,生产者和消费者只能有一个对存储区操作(即临界区)。
//如果两者同时对存储区操作,即同时取和生产的话,必定会有一个等待,当另一个完成操作后自己才会被唤醒。
//生产者在存储区满时不能再生产,进入等待,消费者同理
//完成同步互斥效果
//希望对你朋友有启发
/*----以下为代码部分-----*/
//定义全局变量
int
empty
=
1;//信号量表示存储单元空,可以生产产品
int
full
=
0;//信号量表示存储单元空,不可以消费产品
//P操作
void
P(int
&mutex)

*mutex--;
if(*mutex<0)

//当前进程挂起的程序实现


//V操作
void
V(int
&mutex)

*mutex++;
if(*mutex
<=0)

//唤醒等待中的进程程序实现


//生产者程序
void
producer()

P(&
empty);//若此时存储区空,则可以生产,否则程序挂起等待
//生产一个产品操作
V(&full);//通知消费者进程,可以取产品

//消费者程序
void
consumer()
P(&full);//若此时存储区不空,则可以取产品,否则消费者程序挂起等待
//取走一个产品操作
V(&
empty);//通知生产者进程可以生产

//主函数
void
main()

//分别调用生产者,消费者程序,顺序不限,因为已经完成信号量的同步,若发生同步问题就会等待
producer();
consumer();
consumer();
producer();
………………
参考技术D //整个程序以伪代码形式给出,当做一个提示吧,这样你同学就应该有思路了
//程序中有注释部分和需要他自己完善的部分,我给的是框架
//老师只是要求用C程序模拟这个机制来实现,就是通过你所学的知识模拟一个效果即可
//利用P,V操作使得在同一时刻,生产者和消费者只能有一个对存储区操作(即临界区)。
//如果两者同时对存储区操作,即同时取和生产的话,必定会有一个等待,当另一个完成操作后自己才会被唤醒。
//生产者在存储区满时不能再生产,进入等待,消费者同理
//完成同步互斥效果
//希望对你朋友有启发
/*----以下为代码部分-----*/
//定义全局变量
intempty=1;//信号量表示存储单元空,可以生产产品
intfull=0;//信号量表示存储单元空,不可以消费产品
//P操作
voidP(int&mutex)

*mutex--;
if(*mutex<0)

//当前进程挂起的程序实现


//V操作
voidV(int&mutex)

*mutex++;
if(*mutex<=0)

//唤醒等待中的进程程序实现


//生产者程序
voidproducer()

P(&empty);//若此时存储区空,则可以生产,否则程序挂起等待
//生产一个产品操作
V(&full);//通知消费者进程,可以取产品

//消费者程序
voidconsumer()
P(&full);//若此时存储区不空,则可以取产品,否则消费者程序挂起等待
//取走一个产品操作
V(&empty);//通知生产者进程可以生产

//主函数
voidmain()

//分别调用生产者,消费者程序,顺序不限,因为已经完成信号量的同步,若发生同步问题就会等待
producer();
consumer();
consumer();
producer();
………………

以上是关于求用c语言实现消费者和生产者的问题,简单点,就用一个生产者和一个消费者的两进程同步算法,谢谢啦各位的主要内容,如果未能解决你的问题,请参考以下文章

C语言之简单使用互斥锁条件锁实现生产者消费者模型操作

求用C语言编写一个简单的学生信息管理程序和课程设计报告

用C语言编写程序:生产者和消费者之间实现同步与互斥问题

简单的“生产者-消费者”问题 请用C语言编写

用C语言实现--生产者与消费者的问题(PV操作)

请问如何用C语言实现“生产者与消费者问题”?(最好附上完整的C语言源代码)