电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

嵌入式应用程序设计综合教程 教学课件 ppt 作者 华清远见嵌入式学院 曾宏安 冯利美 第五章linux多线程编程

32页
  • 卖家[上传人]:E****
  • 文档编号:89495230
  • 上传时间:2019-05-25
  • 文档格式:PPTX
  • 文档大小:377.65KB
  • / 32 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、Linux 线程,www.embedu.org,线程基础,每个用户进程有自己的地址空间 系统为每个用户进程创建一个 task_struct来描述该进程 该结构体中包含了一个指针指向该进 程的虚拟地址空间映射表 实际上task_struct 和地址空间映射表一起用来 表示一个进程,task_struct,Memory_map,www.embedu.org,线程基础,由于进程的地址空间是私有的,因此在进程间上下文切换时,系统开销比较大 为了提高系统的性能,许多操作系统规范里引入了轻量级进程的概念,也被称为线程 在同一个进程中创建的线程共享该进程的地址空间 Linux里同样用task_struct来描述一个线程。线程和进程都参与统一的调度,www.embedu.org,线程基础,通常线程指的是共享相同地址 空间的多个任务 使用多线程的好处 大大提高了任务切换的效率 避免了额外的TLB & cache的刷新,task_struct,task_struct,task_struct,task_struct,task_struct,Memory_map,www.embedu.org,线程基础,多线程

      2、通过第三方的线程库来实现 New POSIX Thread Library (NPTL) 是早期Linux Threads的改进 采用1:1的线程模型 显著的提高了运行效率 信号处理效率更高,www.embedu.org,线程基础,一个进程中的多个线程共享以下资源 可执行的指令 静态数据 进程中打开的文件描述符 信号处理函数 当前工作目录 用户ID 用户组ID,www.embedu.org,线程基础,每个线程私有的资源如下 线程ID (TID) PC(程序计数器)和相关寄存器 堆栈 局部变量 返回地址 错误号 (errno) 信号掩码和优先级 执行状态和属性,www.embedu.org,多线程编程,NPTL线程库中提供了如下基本操作 创建线程 删除线程 控制线程 线程间同步和互斥机制 信号量 互斥锁 条件变量,www.embedu.org,多线程编程,www.embedu.org,多线程编程,www.embedu.org,多线程编程,www.embedu.org,多线程示例(1 of 3),#include #include #include #include char messag

      3、e32 = “Hello World”; void *thread_function(void *arg); int main(int argc, char *argv) pthread_t a_thread; void *thread_result; if (pthread_create(&a_thread, NULL, thread_function, (void *)message) 0) /*使用缺省属性创建线程*/,www.embedu.org,多线程示例(2 of 3), perror(“fail to pthread_create”); exit(-1); printf(“waiting for thread to finishn”); if (pthread_join(a_thread, ,www.embedu.org,多线程示例(3 of 3),void *thread_function(void *arg) printf(“thread_function is running, argument is %sn”, (char *)arg); strcpy(messa

      4、ge, “marked by thread”); pthread_exit(“Thank you for the cpu time”); 编译多线程程序 # gcc -o sample sample.c -lpthread -D_REENTRANT -lpthread : 链接pthread库 -D_REENTRANT : 生成可重入代码,Linux 线程同步和互斥,www.embedu.org,线程间机制,多线程共享同一个进程的地址空间 优点:线程间很容易进行通信 通过全局变量实现数据共享和交换 缺点:多个线程同时访问共享对象 时需要引入同步和互斥机制,task_struct,task_struct,task_struct,task_struct,task_struct,Memory_map,www.embedu.org,线程间同步,同步(synchronization)指的是多个任务(线程) 按照约定的顺序相互配合完成一件事情 1968年,Edsgar Dijkstra基于信号量的概念 提出了一种同步机制 由信号量来决定线程是继续运行还是阻塞 等待,www.embedu.org,线

      5、程间同步操作,信号量代表某一类资源,其值表示系统中该资源的数量 信号量是一个受保护的变量,只能通过三种操作来访问 初始化 操作(申请资源) 操作(释放资源) 信号量的值为非负整数,www.embedu.org,线程间同步操作,() 含义如下: if (信号量的值大于0) 申请资源的任务继续运行; 信号量的值减一; else 申请资源的任务阻塞; V() 含义如下: if (没有任务在等待该资源) 信号量的值加一; else 唤醒第一个等待的任务,让其继续运行,www.embedu.org,Posix Semaphore API,posix中定义了两类信号量: 无名信号量(基于内存的信号量) 有名信号量 pthread库常用的信号量操作函数如下: int sem_init(sem_t *sem, int pshared, unsigned int value); int sem_wait(sem_t *sem); / P操作 int sem_post(sem_t *sem); / V操作 int sem_trywait(sem_t *sem); int sem_getvalue(sem_

      6、t *sem, int *svalue);,www.embedu.org,Posix Semaphore API,www.embedu.org,Posix Semaphore API,www.embedu.org,线程同步示例(1 of 3),#include #include #include #include #include char buf60; sem_t sem; void *function(void *arg); int main(int argc, char *argv) pthread_t a_thread; void *thread_result; if (sem_init( ,www.embedu.org,线程同步示例(2 of 3),if (pthread_create( ,www.embedu.org,线程同步示例(3 of 3),void *function(void *arg) while ( 1 ) sem_wait( ,www.embedu.org,线程间互斥,引入互斥(mutual exclusion)锁的目的是用来保证共享数据操作的完整性。 互斥

      7、锁主要用来保护临界资源 每个临界资源都由一个互斥锁来保护,任何时刻最多只能有一个线程能访问该资源 线程必须先获得互斥锁才能访问临界资源,访问完资源后释放该锁。如果无法获得锁,线程会阻塞直到获得锁为止,www.embedu.org,Posix Mutex API,www.embedu.org,Posix Mutex API,www.embedu.org,线程互斥示例(1 of 4),#include #include #include #include unsigned int value1, value2, count; pthread_mutex_t mutex; void *function(void *arg); int main(int argc, char *argv) pthread_t a_thread; if (pthread_mutex_init(&mutex, NULL) 0) ,www.embedu.org,线程互斥示例(2 of 4),perror(“fail to mutex_init”); exit(-1); if (pthread_create( #endif,www.embedu.org,线程互斥示例(3 of 4),value1 = count; value2 = count; #ifdef _LOCK_ pthread_mutex_unlock( #endif,www.embedu.org,线程互斥示例(4 of 4),if (value1 != value2) printf(“count=%d , value1=%d, value2=%dn”, count, value1, value2); usleep(100000); #ifdef _LOCK_ pthread_mutex_unlock( ,

      《嵌入式应用程序设计综合教程 教学课件 ppt 作者 华清远见嵌入式学院 曾宏安 冯利美 第五章linux多线程编程》由会员E****分享,可在线阅读,更多相关《嵌入式应用程序设计综合教程 教学课件 ppt 作者 华清远见嵌入式学院 曾宏安 冯利美 第五章linux多线程编程》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.