实验三 应用程序设计.doc_第1页
实验三 应用程序设计.doc_第2页
实验三 应用程序设计.doc_第3页
实验三 应用程序设计.doc_第4页
实验三 应用程序设计.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验三 多线程应用程序设计一、实验目的1.了解多线程程序设计的基本原理;2.学习pthread库函数的使用。二、实验设备硬件:UP-TECH S2410/P270 DVP教学科研系统、PC机Pentium 500 以上, 硬盘10G 以上,内存大128M软件: PC 机操作系统REDHAT LINUX 9.0MINICOMARM-LINUX 开发环境三、实验内容读懂 pthread.c 的源代码,熟悉几个重要的PTHREAD 库函数的使用。掌握共享锁和信号量的使用方法。进入/arm2410cl/exp/basic/02_pthread 目录,运行make 产生pthread 程序,使用NFS方式连接开发主机进行运行实验。四、实验步骤/* 向缓冲区中写入一个整数*/void put(struct prodcons * b, int data)pthread_mutex_lock(&b-lock);/*等待缓冲区非满*/while (b-writepos + 1) % BUFFER_SIZE = b-readpos) printf(wait for not fulln);pthread_cond_wait(&b-notfull, &b-lock);/*写数据并且指针前移*/b-bufferb-writepos = data;b-writepos+;if (b-writepos = BUFFER_SIZE) b-writepos = 0;/*设置缓冲区非空信号*/pthread_cond_signal(&b-notempty);pthread_mutex_unlock(&b-lock);1.阅读源代码/*从缓冲区中读出一个整数 */int get(struct prodcons * b)int data;pthread_mutex_lock(&b-lock);/* 等待缓冲区非空*/while (b-writepos = b-readpos) printf(wait for not emptyn);pthread_cond_wait(&b-notempty, &b-lock);/* 读数据并且指针前移 */data = b-bufferb-readpos;b-readpos+;if (b-readpos = BUFFER_SIZE) b-readpos = 0;/* 设置缓冲区非满信号*/pthread_cond_signal(&b-notfull);pthread_mutex_unlock(&b-lock);return data;/*-*/void * producer(void * data)int n;for (n = 0; n %dn, n);/显示生产者的状态put(&buffer, n);put(&buffer, OVER);printf(producer stopped!n);return NULL;/*-*/void * consumer(void * data)/消费者线程int d;while (1) d = get(&buffer);if (d = OVER ) break;/当消费线程结束则退出printf( %d-getn, d);/显示线程当前状态printf(consumer stopped!n);return NULL;/*-*/int main(void)pthread_t th_a, th_b;void * retval;init(&buffer);/初始化共享缓冲区pthread_create(&th_a, NULL, producer, 0);/创建生产者线程pthread_create(&th_b, NULL, consumer, 0);/创建消费者线程/* 等待生产者和消费者结束 */pthread_join(th_a, &retval);/等待生产者和消费线程的结束pthread_join(th_b, &retval);return 0;2.检查源程序和Makefile文件的正确性 rootBC root# cd /arm2410cl/exp/basic/02_pthreadrootBC 02_pthread# ls在实验中,实验所需的代码在/arm2410cl/exp/basic/02_pthread目录下,其中有两个文件。其中的Makefile文件是用来编译源程序pthread.c的;而pthread.c即为此次的实验测试代码。rootBC 02_pthread# cat Makefile在Makefile文件中,环境变量EXTRA_LIBS不可少,因为其中的-lpthread指明了其多线程程序的连接库,如果在连接时出现下图的情况即为libpthread库没有安装成功或找不到:如果出现这种问题,应先检查交叉编译工具链文件夹/opt/host/armv4l-unknown-linux/lib内是否含有多线程共享库。rootBC 02_pthread# ls /opt/host/armv4l-unknown-linux/lib/*pthread*然后再检查Makefile文件中是否出现拼写错误等等。rootBC 02_pthread# cat pthread.c3.交叉编译源程序rootBC 02_pthread# lsrootBC 02_pthread# make如果在编译的过程中没有报错,则在编译后的文件夹下会出现两个新的文件pthread和pthread.o。其中pthread为最终在开发板上可以运行得可执行程序;pthread.o为编译时所产生的目标文件。rootBC 02_pthread# file pthread此步骤的目的是用来检测所生成的程序是否是开发板上能运行的可执行程序。从字段ARM可看出所生成的程序为ARM架构上的可执行程序。若使用虚拟机上的gcc编译器编译,则输出可执行程序的这个字段值为Intel 80386。4.下载程序到开发板(1)配置虚拟机中RedHat主机的IP地址,使其与开发板在同一网段中。注:主机的ip地址为:192.168.23.6 地址随PC确定虚拟机的ip地址配置为:192.168.23.88开发板的ip地址配置为:192.168.23.66(2)打开虚拟机上的nfs服务将文件夹/arm2410cl/exp/basic/02_pthread共享出去,基本权限设置为读写,同时指定共享主机采用通配符,表示在此网段上的所有主机均可访问此文件夹。rootBC 02_pthread# service nfs start(3)执行自挂载测试操作rootBC 02_pthread# mount t nfs 192.168.23.88:/arm2410cl/exp/basic/02_pthread/ /mnt/rootBC 02_pthread# ls /mnt5.执行程序(1)设置开发板上的ip地址并保存(2)在开发板上挂载共享出来的文件夹,执行所编译出的程序/mnt# mount

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论