LINUX环境高级编程(六)概要.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
LINUX环境高级编程 中国地质大学(武汉)计算机学院 朱静 中国地质大学(武汉)计算机学院 线 程 避免死锁 线程的同步 线程创建与终止 线程概念的引入 多线程 并发执行的进程具有两个基本的属性 (1)资源分配属性。操作系统以进程为单位分配虚地址空间、主存和其它系统资源; (2)调度属性。操作系统需要为进程分配调度CPU时间。 这两个基本属性使进程成为并发执行的基本单位。在一些OS中,大多数UNIX系统、Linux等,进程同时具有这两个属性。而另一些OS中,象WinNT、Solaris、OS/2、Mac OS等,这两个属性由OS独立处理。 为了区分两个属性,资源分配单位称为进程(或任务),调度单位称为线程。 线程概念的引入 中国地质大学(武汉)计算机学院 线程 进程内一个CPU执行单元或一个可调度实体 线程只拥有一点在运行中必不可省的资源(线程ID,程序计数器、一组寄存器、栈和线程私有数据),但它可与同属一个进程的其它线程共享进程拥有的全部资源。 在多线程的操作系统中,处理机调度的基本单位是线程。一个进程可以有多个线程,而且至少有一个可执行线程。 中国地质大学(武汉)计算机学院 线程概念的引入 进程和线程的关系 线程是进程的一个组成部分。每个进程创建时只有一个线程,需要时可创建其他线程。 进程的多线程都在进程的地址空间活动。 资源是分给进程的,不是分给线程的。线程在执行中需要资源时,可从进程资源中划分。 处理机调度的基本单位是线程,线程之间竞争处理机。真正在CPU上运行的是线程。 线程在执行时,需要同步。 中国地质大学(武汉)计算机学院 线程概念的引入 进程 控制块 PCB 用户地址空间 线程 控制块 TCB 用户栈 核心栈 线程 控制块 TCB 用户栈 核心栈 线程 控制块 TCB 用户栈 核心栈 多线程进程模块 线程A 线程B 线程C 多线程是OS在一个进程内支持多个线程的能力。 中国地质大学(武汉)计算机学院 线程概念的引入 单线程与多线程的比较 Thread Control Block User Stack User Stack Kernel Stack Kernel Stack User Address Space User AddressSpace 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只在它所属的进程环境中有效。 中国地质大学(武汉)计算机学院 线程概念的引入 创建线程 #includepthread.h 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是传递给该函数的参数。 例: 创建新线程 thread1.c (LP P420) 打印线程ID threadid.c $gcc thread1.c –o thread1 –lpthread 注意:包含线程的C程序在编译时加-lpthread参数 中国地质大学(武汉)计算机学院 线程创建与终止 线程ID相关系统调用 #includepthread.h pthread_t pthread_self(void);获得线程自身ID int pthread_equal(pthread_t tid1,pthread_t tid2);比较两个线程ID是否相等 线程创建与终止 中国地质大学(武汉)计算机学院 线程的终止 如果进程中的任一线程调

文档评论(0)

南非的朋友 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档