地理与生物信息学院。
2012/ 2013 学年第二学期。
实验报告。课程名称: 嵌入式系统
实验名称: 多线程应用程序设计
班级学号 b10090406
学生姓名周炳威
指导教师余雪勇
日期2013 年 4 月。
1、实验题目:
了解多线程程序设计的基本原理。
学习 pthread 库函数的使用。
二、 实验目的:
1.让同学们体验linux编程环境和实现过程。
2.加强同学们实际的动手编程能力。
三、 实验仪器:
pc机(装有虚拟机程序)
硬件:up-netarm2410-s 嵌入式实验平台、pc 机pentium 500 以上, 硬盘10g 以上。
四、 实验内容:
读懂 的源**,熟悉几个重要的pthread 库函数的使用。掌握共享锁和信号量的使用方法。进入/arm2410s/exp/basic/02_pthread 目录,运行make 产生pthread 程序,使用nfs 方式连接开发主机进行运行实验。
五、实验过程:
1.多线程程序的优缺点。
多线程程序作为一种多任务、并发的工作方式,有以下的优点:
1) 提高应用程序响应。这对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系。
统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技术,将耗时长的操作(time consuming)置于一个新的线程,可以避免这种尴尬的情况。
2) 使多cpu 系统更加有效。操作系统会保证当线程数不大于cpu 数目时,不同的线程运行。
于不同的cpu 上。
3) 改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立。
的运行部分,这样的程序会利于理解和修改。
libc 中的pthread 库提供了大量的api 函数,为用户编写应用程序提供支持。
2.实验源**与结构流程图。
本实验为著名的生产者-消费者问题模型的实现,主程序中分别启动生产者线程和消费者。
线程。生产者线程不断顺序地将0 到1000 的数字写入共享的循环缓冲区,同时消费者线程。
不断地从共享的循环缓冲区读取数据。流程图如图2.2.1 所示:
* the classic producer-consumer example.
* illustrates mutexes and conditions.
#include <>
#include <>
#include <>
#include ""
#define buffer_size 16
* circular buffer of integers. *
struct prodcons
/* write the data and advance write pointer */
b->buffer[b->writepos] =data;
b->writepos++;
if (b->writepos >=buffer_size) b->writepos = 0;
/* signal that the buffer is now not empty */
pthread_cond_signal(&b->notempty);
pthread_mutex_unlock(&b->lock);
* read and remove an integer from the buffer */
int get(struct prodcons * b)
int data;
pthread_mutex_lock(&b->lock);
/* wait until buffer is not empty */
while (b->writepos ==b->readpos)
/* read the data and advance read pointer */
data = b->buffer[b->readpos];
b->readpos++;
if (b->readpos >=buffer_size) b->readpos = 0;
/* signal that the buffer is now not full */
pthread_cond_signal(&b->notfull);
pthread_mutex_unlock(&b->lock);
return data;
#define over (-1)
struct prodcons buffer;
void * producer(void * data)
int n;
for (n = 0; n < 1000; n++)
put(&buffer, over);
printf("producer stopped!");
return null;
void * consumer(void * data)
int d;
while (1)
printf("consumer stopped!");
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);
/* wait until producer and consumer finish. *
pthread_join(th_a, &retval);
pthread_join(th_b, &retval);
《嵌入式系统实验》作业
用于验证一个常见的冲突问题。在这个问题中,有5个哲学家坐在一个圆桌上。食物摆在桌子中间,桌子上总共有5把叉子,每个哲学家的左右手各有一把。因为吃饭时,哲学家需要同时使用左手和右手的叉子,所以哲学家必须和他左边和右边的哲学家共享叉子。在这个实验中,假定哲学家每次吃饭的时间长度为单位1,吃完一次后则放下...
《嵌入式系统实验》作业
嵌入式系统实验 作业。实验1.hello world程序 20 实验要求 1 了解一种非vxworks的嵌入式系统,简述该操作系统。实验目的 的特点以及其开发环境的组成。2 在windows操作系统平台上安装workbench集成开发环境,新建一个类型为downloadable kernel mod...
嵌入式作业三
嵌入式课程实验报告。姓名 李冬祥。学号 08808003 小组成员 徐迎春。专业年级 电信081 指导教师 王东。实验时间 2011 5 25 西北农林科技大学机电学院。实验五 qt图形界面应用程序安装。一 实验目的 1.了解在 linux 下安装qt的基本步骤 2.学会在 qt 环境在 x11 平...