文档介绍:LINUX 环境高级编程中国地质大学(武汉)计算机学院朱静中国地质大学(武汉)计算机学院线程避免死锁线程的同步线程创建与终止线程概念的引入多线程?并发执行的进程具有两个基本的属性(1)资源分配属性。操作系统以进程为单位分配虚地址空间、主存和其它系统资源; (2)调度属性。操作系统需要为进程分配调度 CPU 时间。这两个基本属性使进程成为并发执行的基本单位。在一些 OS中,大多数 UNIX 系统、 Linux 等,进程同时具有这两个属性。而另一些 OS中,象 WinNT 、 Solaris 、OS/2、Mac OS 等,这两个属性由 OS独立处理。为了区分两个属性, 资源分配单位称为进程(或任务), 调度单位称为线程。线程概念的引入中国地质大学(武汉)计算机学院?线程??进程内进程内一个一个 CPU CPU 执行单元执行单元或一个可调或一个可调度实体度实体??线程只拥有一点在运行中必不可省的线程只拥有一点在运行中必不可省的资源(线程资源(线程 ID, ID, 程序计数器、一组寄存程序计数器、一组寄存器、栈和线程私有数据),但它可与器、栈和线程私有数据),但它可与同属一个进程的其它线程共享进程拥同属一个进程的其它线程共享进程拥有的全部资源有的全部资源。。??在多线程的操作系统中,处理机调度在多线程的操作系统中,处理机调度的基本单位是线程。的基本单位是线程。一个进程可以有一个进程可以有多个线程,而且至少有一个可执行线多个线程,而且至少有一个可执行线程。程。中国地质大学(武汉)计算机学院线程概念的引入?进程和线程的关系??线程是进程的一个组成部分。每个进程创线程是进程的一个组成部分。每个进程创建时只有一个线程,需要时可创建其他线建时只有一个线程,需要时可创建其他线程。程。??进程的多线程都在进程的地址空间活动。进程的多线程都在进程的地址空间活动。??资源是分给进程的,不是分给线程的。线资源是分给进程的,不是分给线程的。线程在执行中需要资源时,可从进程资源中程在执行中需要资源时,可从进程资源中划分。划分。??处理机调度的基本单位是线程,线程之间处理机调度的基本单位是线程,线程之间竞争处理机。真正在竞争处理机。真正在 CPU CPU 上运行的是线程。上运行的是线程。??线程在执行时,需要同步线程在执行时,需要同步。。中国地质大学(武汉)计算机学院线程概念的引入进程控制块 PCB 用户地址空间线程控制块 TCB 用户栈核心栈线程控制块 TCB 用户栈核心栈线程控制块 TCB 用户栈核心栈多线程进程模块线程 A 线程B 线程C 多线程是 OS在一个进程内支持多个线程的能力。中国地质大学(武汉)计算机学院线程概念的引入单线程与多线程的比较 Thread Control Block User Stack User Stack Kernel Stack Kernel Stack User Address Space User AddressS pace Process Control Block Process Control Block Thread Single-Threaded Process Model Multithreaded Process Model Thread Control Block User Stack Kernel Stack Thread Thread Control Block User Stack Kernel Stack Thread 中国地质大学(武汉)计算机学院?线程的特征?创建线程比创建进程快,且节省开销。?一个进程至少要有一个可执行线程,可以有多个线程。?一个线程可以创建它所需的其他线程。?一个线程可以有就绪,等待,运行等状态。?进程可创建多个线程来执行同一个程序的不同部分,方便而有效地实现并行性。?每个线程有一个线程 ID,进程 ID在整个系统中是唯一的,但线程 ID只在它所属的进程环境中有效。中国地质大学(武汉)计算机学院线程概念的引入?创建线程#include<> pthread_t pthread_create (pthread_t *restrict thread ,const pthread_attr_t *restrict attr ,void *(*start_routine )(void *),void *restrict arg ); 调用成功返回由 thread 指向的线程 ID,attr 参数用于指定线程属性, attr 设为 NULL 表示创建默认属性的线程。新建线程从 start_routine 函数的地址开始运行, arg 是传递给该函数的参数。例: 创建新线程 (LP P420) 打印线程 ID threa