欢迎来到天天文库
浏览记录
ID:61455343
大小:798.50 KB
页数:9页
时间:2021-02-01
《实验一 多线程编程、、.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
实验一:多线程编程课程网络高级编程实验项目多线程编程成绩专业班级网络工程2012学号批阅日期姓名王玺实验日期2014-11-24指导教师一、实验目的(1)熟悉Linux下c编程环境(2)掌握Linux进程创建(3)掌握Linux线程及线程同步请将作业及工程提交至天空教室作业处,注意截止时间。注意:需要截图的地方,非特殊情况不要全屏截图。所有相同或非常相似作业一律记为0分。二、实验步骤(一)熟悉编程环境1.在编辑器中编辑源程序main.c,calc.cmain.c文件内容为#includeintcalc(int);intmain(intargc,char*argv[]){intiInput=0,iOutput=0;inti=0;scanf("%i",&iInput);while(iInput<0){printf("Pleaseinputapositiveinteger! ");scanf("%i",&iInput);}iOutput=calc(iInput);printf("Resultis:%i ",iOutput);return0;} calc.c的文件内容为#includeintcalc(intiIn){inti=0,iOut=0;iOut=iIn;for(i=0;i#include#includeintmain(){inti;/*获得当前进程和其父进程的ID号*/for(i=0;i<3;i++){fork();printf("i=%d当前进程的ID号为:%d;父进程ID为:%d ",i,getpid(),getppid());}//sleep(2);return0;}2.给出结果并分析3.如果恢复sleep语句,得到什么结果 1.运行教材thread.c,观察结果并做简要分析2.线程互斥,运行以下代码,观察结果并简要分析#include#include#include#includevoid*producter_f(void*arg);/*生产者*/ void*consumer_f(void*arg);/*消费者*/intbuffer_has_item=0;/*缓冲区计数值*/_mutex_tmutex;/*互斥区*/intrunning=1;/*线程运行控制*/intmain(void){pthread_tconsumer_t;/*消费者线程参数*/pthread_tproducter_t;/*生产者线程参数*/pthread_mutex_init(&mutex,NULL);/*初始化互斥*/pthread_create(&producter_t,NULL,(void*)producter_f,NULL);/*建立生产者线程*/pthread_create(&consumer_t,NULL,(void*)consumer_f,NULL);/*建立消费者线程*/usleep(1);/*等待,线程创建完毕*/running=0;/*设置线程退出值*/pthread_join(consumer_t,NULL);/*等待消费者线程退出*/pthread_join(producter_t,NULL);/*等待生产者线程退出*/pthread_mutex_destroy(&mutex);/*销毁互斥*/return0;}void*producter_f(void*arg)/*生产者线程程序*/{while(running)/*没有设置退出值*/{pthread_mutex_lock(&mutex);/*进入互斥区*/buffer_has_item++;/*增加计数值*/printf("生产,总数量:%d ",buffer_has_item);/*打印信息*/pthread_mutex_unlock(&mutex);/*离开互斥区*/}}void*consumer_f(void*arg)/*消费者线程程序*/{while(running)/*没有设置退出值*/{pthread_mutex_lock(&mutex);/*进入互斥区*/buffer_has_item--;/*减小计数值*/printf("消费,总数量:%d ",buffer_has_item);/*打印信息*/pthread_mutex_unlock(&mutex);/*离开互斥区*/}} 修改后:3.线程同步,实现“生产者消费者问题”要求:缓冲区大小为20,生产者每次放一个产品,消费者每次取走一个产品;生产者和消费者至少2个。写出流程,给出完整代码;对运行结果做简要分析。#include #include#include#includevoid*producter_f(void*arg);/*生产者*/void*consumer_f(void*arg);/*消费者*/void*producter_g(void*arg);void*consumer_g(void*arg);intbuffer_has_item=0;/*缓冲计数值*/pthread_mutex_tmutex;/*互斥区*/intrunning=1;/*线程运行控制*/intmain(void){pthread_tconsumer_t;/*消费者线程参数*/pthread_tproducter_t;/*生产者线程参数*/pthread_mutex_init(&mutex,NULL);/*初始化互斥*/pthread_create(&producter_t,NULL,(void*)producter_f,NULL);/*建立生产者线程*/pthread_create(&producter_t,NULL,(void*)producter_g,NULL);pthread_create(&consumer_t,NULL,(void*)consumer_f,NULL);/*建立消费者线程*/pthread_create(&consumer_t,NULL,(void*)consumer_g,NULL);sleep(1);/*等待,线程创建完毕*/running=0;/*设置线程退出值*/pthread_join(consumer_t,NULL);/*等待消费者线程退出*/pthread_join(producter_t,NULL);/*等待生产者线程退出*/pthread_mutex_destroy(&mutex);/*销毁互斥*/return0;}void*producter_f(void*arg)/*生产者线程程序*/{while(running)/*没有设置退出值*/{pthread_mutex_lock(&mutex);if(buffer_has_item<20){/*进入互斥区*/buffer_has_item++;/*增加计数值*/printf("生产,总数量:%d ",buffer_has_item);/*打印信息*/}pthread_mutex_unlock(&mutex);usleep(1);/*离开互斥区*/} }void*producter_g(void*arg)/*生产者线程程序*/{while(running)/*没有设置退出值*/{pthread_mutex_lock(&mutex);if(buffer_has_item<20){/*进入互斥区*/buffer_has_item++;/*增加计数值*/printf("生产,总数量:%d ",buffer_has_item);/*打印信息*/}pthread_mutex_unlock(&mutex);usleep(1);/*离开互斥区*/}}void*consumer_f(void*arg)/*消费者线程程序*/{while(running)/*没有设置退出值*/{pthread_mutex_lock(&mutex);/*进入互斥区*/if(buffer_has_item>0){buffer_has_item--;/*减小计数值*/printf("消费,总数量:%d ",buffer_has_item);/*打印信息*/}usleep(2);pthread_mutex_unlock(&mutex);/*离开互斥区*/}}void*consumer_g(void*arg)/*消费者线程程序*/{while(running)/*没有设置退出值*/{pthread_mutex_lock(&mutex);/*进入互斥区*/if(buffer_has_item>0){buffer_has_item--;/*减小计数值*/printf("消费,总数量:%d ",buffer_has_item);/*打印信息*/}usleep(2);pthread_mutex_unlock(&mutex);/*离开互斥区*/}}
此文档下载收益归作者所有
举报原因
联系方式
详细说明
内容无法转码请点击此处