linux 生产者消费者 多进程,Linux实验报告 消费者与生产者 多线程.doc

Linux实验报告 消费者与生产者 多线程

编号?

LINUX实验报告

题 目 linux高级程序设计

学生姓名

指导教师

学 院

专业班级

学 号

完成时间

实验3 Linux 高级程序设计

1、实验目的

(1)了解Linux操作系统下应用程序开发流程

(2)掌握gun工具链的使用

(3)了解Linux高级编程技巧(例如IPC机制、系统调用等)

2、实验内容

编写一个简单的C语言程序,编写Makefile文件。了解编译过程,并用gdb进行调试。

以下任选其一:

编写一个生产者-消费者程序组,要求同时支持多个生产者和消费者,生产者与消费者使用Message Queue或shared Memory或者Pipe File机制进行通信

编写一个多线程程序(pthread),实现2线程同步互斥

3、实验要求

写出源程序,并编译运行

详细记录程序调试及运行结果

实验要求

写出源程序,并编译运行

详细记录程序调试及运行结果

程序代码及运行结果

对于实验1

#include

int main(void)

{

printf("Hello World!");

return 0;

}

调试: gcc -c helloworld.c

gcc –o helloworld helloworld.o

对于实验2:

编写一个生产者-消费者程序组,要求同时支持多个生产者和消费者,生产者与消费者使用Message Queue或shared Memory或者Pipe File机制进行通信

设计方案:

首先定义一个定长数组(数组中的元素有0和1组成),作为一个数据缓冲区。然后定义一个函数test,用来检测数组中当前1的个数。然后定义两个函数,一个名为生产者函数,用来往数组中添加1,一个名为消费者函数,用来取走数组中的1.然后用test函数检测数组中1的个数,并报告给用户,然后选择堵塞生产者还是消费者。

程序运行截图:

源代码:

#include

int test(int array[])

{

int i=0;

while(array[i]==1)

{

i++;

}

return i;

}

main()

{

int array[20],n,m,i,l;

printf("生产者消费者问题\n\n\n");

printf("请输入当前buffer的空间n(n<20)\n");

scanf("%d",&n);

for(i=0;i

printf("请输入当前的资源数m(m<20)\n");

scanf("%d",&m);

for(i=0;i

l=test(array);

printf("当前的空间为%d,已用空间为%d,可用空间为%d\n",n,l,n-l);

printf("请选择下列操作:\n\n1.生产\n\n2.消费\n\n3.退出\n");

while(1)

{

int a;

scanf("%d",&i);

if(i==1)

{

printf("请输入要生产的数量a\n");

scanf("%d",&a);

for(i=m;i

for(i=0;i

printf("\n");

l=test(array);

m=m+a;

if(l>n)

{

printf("缓冲区已满,请阻塞生产者进程,并继续进行操作!!\n");

m=n;

l=n;

}

else

{

printf("当前的空间为%d,已用空间为%d,可用空间为%d\n",n,l,n-l);printf("\n\n");

printf("请继续选择操作\n\n");

}

}

else if(i==2)

{

printf("请输入要消费的数量a\n");//printf("%d\n",m);

scanf("%d",&a);

for(i=m-1;i>m-1-a;i--)

{

array[i]=0;

if(i<0)break;

}

//for(i=0;i

l=test(array);

m=m-a

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值