求用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语言实现消费者和生产者的问题,简单点,就用一个生产者和一个消费者的两进程同步算法,谢谢啦各位的主要内容,如果未能解决你的问题,请参考以下文章