第11章 多线程编程.pdf
上传人:qw****27 上传时间:2024-09-12 格式:PDF 页数:8 大小:442KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

第11章 多线程编程.pdf

第11章多线程编程.pdf

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

11.1Linux线程概述第11章多线程编程1.线程概念本章内容:进程是系统中程序执行和资源分配的基本单位。每个进嵌入式程都拥有自己的数据段、代码段和堆栈段,造成进程在进Linux中线程的基本概念行切换操作时有比较复杂的上下文切换等动作。Linux系统Linux中多线程编程:为了进一步减少处理机的空转时间,支持多处理器及减☆线程的创建及使用少上下文切换开销,进程在演化中出现线程概念。它是进程内独立的一条运行路线,是处理器调度的最小单元,也信息科学与技术学院☆多线程互斥与同步称为轻量级进程。线程可对进程的内存空间和资源进行访网络通信技术实验室张新有☆线程属性的设置问,并与同一进程中的其他线程共享资源。Email:xyzhang@swjtu.edu.cn☆生产者---消费者问题Phone:66365978因此线程的上下文切换的开销比创建进程小很多。2014/4/2CH14:多线程编程zhangxy22014/4/2CH14:多线程编程zhangxy3Fig11.1SingleandMultithreadedProcesses2.线程机制的分类和特性同进程一样,线程也将相关的执行状态和存储变量放在线程控制块(TCB)内。一个进程可以有多个线程,也就是(1)用户级线程(UserLevelThreads)有TCB及堆栈寄存器,但却共享一个用户地址空间。用户级线程主要解决的是上下文切换的问题,它的调度由于线程共享了进程的资源和地址空间,任何线程对系算法和调度过程全部由用户自行选择决定,在运行时不需统资源的操作都会给其他线程带来影响。要特定的内核支持。操作系统往往会提供一个用户空间的线程库,该线程库提供了线程的创建、调度和撤销等功能,因此,多线程中的同步是非常重要的问题!而内核仍然仅对进程进行管理。若一个进程中的某一线程一个进程存储在处理器各寄存器中的中间数据叫做进调用了阻塞的系统调用函数,那么该进程中的其他所有线程的上下文(Context),所以进程的切换实质上就是被中程也同时被阻塞。止运行进程与待运行进程上下文的切换。在进程未占用处用户级线程的主要缺点是:在一个进程中的多个线程的理器时,进程的上下文是存储在进程的私有堆栈中的。调度中无法发挥多处理器的优势。LinuxPOSIXPthreads为用户级线程。2014/4/2CH14:多线程编程zhangxy42014/4/2CH14:多线程编程zhangxy52014/4/2CH14:多线程编程zhangxy61(2)内核线程(KernelThreads)1)内核管理线程的创建与调度。这种线程允许不同进程(3)轻量级进程(LightWeightProcesses)中的线程按照同一相对优先调度方法进行调度,这样可发轻量级进程是内核支持的用户线程,是内核线程的一挥多处理器的并发优势。种抽象对象。每个用户线程拥有一个或多个轻量级线程,2)现在大多数系统都采用用户级线程与核心级线程并存而每个轻量级线程分别被绑定在一个内核线程上。的方法。一个用户级线程可对应一个或几个内核级线程,SunSolaris支持用户线程(UserLevelThreads)和内即“一对一”或“多对一”模型。这样既可满足多处理机核线程(Kernelthreads),并定义了轻量级进程(Light系统的需要,也可最大限度地减少调度开销。WeightProcesses)。一个进程可有大量用户线程;大量注:使用线程机制加快上下文切换速度且节省很多资源。用户线程复用少量的轻量级进程,不同的轻量级进程分但因为在用户态和内核态均要实现调度管理,所以会增加别对应不同的内核线程。实现的复杂度和引起优先级反转可能性。多线程程序的同Fig11.2用户线程、轻量级进程和内核线程的关系步设计与调试也会增加程序实现的难度。2014/4/2CH14:多线程编程zhangxy72014/4/2CH14:多线程编程zhangxy82014/4/2CH14:多线程编程zhangxy9线程编程3.Linux线程技术的发展3)为了改善LinuxThread问题,需要根据新内核机制重11.2Linux1)Linux2.2内核中并不存在真正意义的线程。Linux中常新编写线程库。许多项目在研究如何改善Linux对线程的介绍基于POSIX线程库编程方法:用户空间的线程操用的线程pthread实际上是通过进程来模拟的,也就是说支持,其中两个最有竞争力:作,具有很好的可移植性。Linux中的线程也是通过fork()创建的“轻”进程,且线程个由IBM主导的新一代POSIX线程库(NextGeneration1.pthread线程创建(p282)数也