实验一 多线程编程、、.doc

实验一 多线程编程、、.doc

ID:61455343

大小:798.50 KB

页数:9页

时间:2021-02-01

上传者:U-5097
实验一 多线程编程、、.doc_第1页
实验一 多线程编程、、.doc_第2页
实验一 多线程编程、、.doc_第3页
实验一 多线程编程、、.doc_第4页
实验一 多线程编程、、.doc_第5页
资源描述:

《实验一 多线程编程、、.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);/*离开互斥区*/}}

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭