版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Linux 多线程程序设计,主讲人:侯健,线程理论基础 多线程程序设计 线程同步,线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所支持,包括Windows/NT、Linux。,多线程,为什么有了进程,还有引入线程? 使用多线程有什么好处?,多线程,优点,使用多线程的理由之一 和进程相比,它是一种非常节俭的多任务操作方式。在Linux系统下,启动一个新的进程必须分配给它独立
2、的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种昂贵的多任务工作方式。,运行于一个进程中的多个线程,它们之间使用相同的地址空间,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。 据统计,一个进程的开销大约是一个线程开销的30倍左右。,优点,优点,使用多线程的理由之二 线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便。线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。,除了以上所说的优点外,多线程程序作为一种多任务、并
3、发的工作方式,还有以下的优点: 1) 提高应用程序响应。使用多线程技术,将耗时长的操作(time consuming)置于一个新的线程。 2) 使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。 3) 改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。,Linux系统下的多线程遵循POSIX线程接口,称为pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。,多线程,线程理论基础 多线程程序设计 线程同步,创建线程
4、,tidp:线程标识符(唯一性) attr:线程属性(NULL) start_rtn:线程要执行的函数 arg: start_rtn的参数,int pthread_create(pthread_t *tidp, const pthread_attr_t *attr,void *(*start_rtn),void *arg),#include ,编译,因为pthread的库不是Linux系统的库,所以在进行编译的时候要加上,-lpthread,#gcc filename -lpthread,实例分析,thread_creat.c thread_int.c thread_string.c thre
5、ad_share.c,thread_creat.c,thread_int.c,thread_string.c,thread_share.c,终止线程,如果进程中任何一个线程调用exit或_exit,那么整个进程都会终止。 线程的正常退出方式有: 使用return返回, 使用pthread_exit这个函数。,线程退出,例子:thread_exit.c,使用return (void *)8;退出线程,使用exit(0);退出线程,例子:thread_exit.c,使用pthread_exit(void *)8); 退出线程,例子:thread_exit.c,线程等待,例子 thread_join
6、.c,例子 thread_join.c,去掉pthread_join(pth, NULL);,线程标识,例子 thread_id.c,清除,线程终止有两种情况:正常和非正常终止。 正常终止:线程主动调用pthread_exit 或者从线程函数中return都将使线程正常退出,这是可预见的退出方式。 非正常终止:线程在其他线程的干预下,或者由于自身运行出错而退出,这种退出方式是不可预见的。,不管是哪种情况,都要考虑资源回收的问题,清除,清除,清除,线程理论基础 多线程程序设计 线程同步,线程同步,进程多线程编程,因为无法知道哪个线程会在哪个时候对共享资源进行操作,因此让如何保护共享资源变得复杂,
7、通过下面这些技术的使用,可以解决线程之间对资源的竞争。 1、互斥锁(互斥量)Mutex 2、信号量Semaphore,互斥量,互斥量,互斥锁的操作主要包括以下几个步骤: 互斥锁初始化:pthread_mutex_init 互斥锁上锁:pthread_mutex_lock 互斥锁判断上锁:pthread_mutex_trylock 互斥锁解锁:pthread_mutex_unlock 消除互斥锁:pthread_mutex_destroy,创建,创建,加锁,解锁,pthread_mutex_t number_mutex; int globalnumber; void write_globalnu
8、mber( ) pthread_mutex_lock (,互斥量PK信号量,信号量,信号量其实就是一个计数器。 通过操作系统中的PV 原语对其进行操作。每一次调用wait操作将会使sem值减一,而如果sem0,则wait操作将会阻塞。(P操作) 每一次调用post操作将会使sem值加一。 (V操作),sem0 表示系统中空闲的该类临界资源的个数 sem=0 表示系统中该类临界资源刚刚好被全部占用,而且没有线程在等待该临界资源 sem0 sem的绝对值表示系统中等待该类临界资源的线程的个数,信号量,1、创建信号量并初始化 int sem_init(sem_t *sem, int pshared, unsigned int value),2、P操作 int sem_wait(sem_t *sem) int sem_t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- MT/T 1294-2025选煤厂智能化重介质分选系统
- GB/T 2666-2026西裤
- 初中英语九年级上册Unit1 Know yourself Wele to the unit 教学设计
- 高阶认知与体系构建:税法核心概念解析与立法技术实务-法学硕士研究生二年级《财税法专题》教学设计
- 初中八年级英语 Unit 5 Reading 1 Encyclopaedias 跨学科探究式阅读教学设计
- 2026客户执行面试题库及答案
- 2026平台筹建面试题目及答案
- 2026社保稽核面试题目及答案
- 2026创科实业面试题及答案
- 作业人员入场基本信息表
- 电商运营流程与管理制度
- 深度解析(2026)《NBT 20455-2017核电厂运行绩效评估准则》(2026年)深度解析
- 2023-2024学年北京市海淀区九年级(上)期末数学试卷(含解析)
- 机械加工质量控制与效率提升策略
- DIY甜品创业计划书
- 2025年湖南农村信用社考试题库附答案
- 西门子变频器更换课件
- 精神科药物知识培训课件
- 心内科导管室进修汇报
- (正式版)DB61∕T 1625-2022 《公路工程施工监理规程》
- 大华监控摄像头IP设置课
评论
0/150
提交评论