2多线程应用程序设计

2多线程应用程序设计

ID:34122249

大小:167.00 KB

页数:10页

时间:2019-03-03

2多线程应用程序设计_第1页
2多线程应用程序设计_第2页
2多线程应用程序设计_第3页
2多线程应用程序设计_第4页
2多线程应用程序设计_第5页
资源描述:

《2多线程应用程序设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、2.2多线程应用程序设计一、实验目的了解多线程程序设计的基本原理。学习pthread库函数的使用。二、实验内容读懂pthread.c的源代码,熟悉几个重要的PTHREAD库函数的使用。掌握共享锁和信号量的使用方法。进入/arm2410s/exp/basic/02_pthread目录,运行make产生pthread程序,使用NFS方式连接开发主机进行运行实验。三、预备知识有C语言基础掌握在Linux下常用编辑器的使用掌握Makefile的编写和使用掌握Linux下的程序编译与交叉编译过程四、实验设备及工具硬件:UP

2、-NETARM2410-S嵌入式实验平台,PC机Pentium500以上,硬盘40G以上,内存大于128M。软件:PC机操作系统REDHATLINUX9.0+MINICOM+ARM-LINUX开发环境五、实验原理及代码分析1.多线程程序的优缺点多线程程序作为一种多任务、并发的工作方式,有以下的优点:1)提高应用程序响应。这对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技术,将耗时长的操作(timeconsuming)置于一个新的线程

3、,可以避免这种尴尬的情况。2)使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。3)改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。LIBC中的pthread库提供了大量的API函数,为用户编写应用程序提供支持。2.实验源代码与结构流程图本实验为著名的生产者-消费者问题模型的实现,主程序中分别启动生产者线程和消费者线程。生产者线程不断顺序地将0到1000的数字写入共享的循环缓冲区,同时消费者线程不断

4、地从共享的循环缓冲区读取数据。流程图如图2.2.1所示:本实验具体代码如下:/*************************************************Theclassicproducer-consumerexample.*Illustratesmutexesandconditions.*byZoujianguo*2003-12-22*************************************************/#include

5、o.h>#include#include#include"pthread.h"#defineBUFFER_SIZE16/*设置一个整数的圆形缓冲区*/structprodcons{intbuffer[BUFFER_SIZE];/*缓冲区数组*/pthread_mutex_tlock;/*互斥锁*/intreadpos,writepos;/*读写的位置*/pthread_cond_tnotempty;/*缓冲区非空信号*/pthread_cond_tnotfull;/*缓冲区非满

6、信号*/};/*--------------------------------------------------------*//*初始化缓冲区*/voidinit(structprodcons*b){pthread_mutex_init(&b->lock,NULL);pthread_cond_init(&b->notempty,NULL);pthread_cond_init(&b->notfull,NULL);b->readpos=0;b->writepos=0;}/*-------------------

7、-------------------------------------*//*向缓冲区中写入一个整数*/voidput(structprodcons*b,intdata){pthread_mutex_lock(&b->lock);/*等待缓冲区非满*/while((b->writepos+1)%BUFFER_SIZE==b->readpos){printf("waitfornotfull");pthread_cond_wait(&b->notfull,&b->lock);}/*写数据并且指针前移*/b->

8、buffer[b->writepos]=data;b->writepos++;if(b->writepos>=BUFFER_SIZE)b->writepos=0;/*设置缓冲区非空信号*/pthread_cond_signal(&b->notempty);pthread_mutex_unlock(&b->lock);}/*-------------------------

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

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

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