- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2.8线程 线程的定义及属性 在引入线程的操作系统中,线程是进程中的一个实体,通常在一个进程中包含多个线程,每个线程都是CPU调度和分派的基本单位,是花费最小开销的实体。线程具有下述属性: (1)轻型实体。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器、一组寄存器和栈)。 2.8线程 (2)独立调度和分派的基本单位。由于线程很“轻”,故线程的切换非常迅速且开销小。 (3)可并发执行。在一个进程中的各个线程之间,可以并发执行,甚至允许在一个进程中所有线程都能并发执行。当然不同进程中的线程也能并发执行。 (4)共享进程资源。在同一进程中的各个线程,都可以共享该进程所拥有的资源,这首先表现在所有线程都具有相同的地址空间(进程的地址空间),还可以访问进程所拥有的已打开文件、定时器、信号量机构等。 线程的状态及其转换 与进程一样,线程是一个动态的概念,在各线程之间也存在着共享资源和相互合作的制约关系,致使线程也有一个从创建到消亡的具有间断性的生命过程,相应地,线程在运行时,也具有下述三种基本状态:(1)运行态,表示线程正获得处理机而运行;(2)就绪态,指线程已具备了各种执行条件,一旦获得CPU便可执行;(3)阻塞态,指线程在执行中因某事件而受阻,处于暂停执行状态。 线程的状态及其转换 值得强调的是,线程不具有进程中的挂起状态,因为挂起的作用是将资源从内存移到外存,而线程不拥有和管理资源。另外,对于多线程系统,若一个线程被阻塞,其进程并不被阻塞,进程中的其他线程依然可以参与调度。 线程的状态及其转换 线程的状态转换是通过相关的控制原语来实现的。常用的原语有:创建线程、线程阻塞、终止线程等。 (1)创建(spawn)。 (2)调度( schedule )。 (3)阻塞( block)。 (4)激活( unlock)。 (5)终止( finish)。 线程间的同步和通信 为使系统中的多线程能有条不紊地运行,在系统中必须提供用于实现线程间同步和通信的机制。为了支持不同频率的交互操作和不同程度的并行性,在多线程操作系统中通常提供多种同步机制,如:互斥锁、条件变量、计数信号量等。 线程间的同步和通信 1.互斥锁: 互斥锁是一种比较简单的、用于实现线程间对资源互斥访问的机制。由于操作互斥锁时空开销低,因而较适于高频率使用的关键共享数据和程序段。互斥锁有两种状态,即开锁(unlock)和关锁(lock)状态。关锁lock操作用于将mutex关上,开锁操作unlock用于将mutex打开。 线程间的同步和通信 2.条件变量: 在许多情况下,只利用mutex来实现互斥访问,可能会引起死锁,为此引入条件变量。每一个条件变量通常都与一个互斥锁一起使用。单纯的互斥锁用于短期锁定,主要用来保证对临界区的互斥进入,而条件变量则用于线程的长期等待,直至所等待的资源成为可用。 线程间的同步和通信 3.计数信号量: 为提高效率,可为线程和进程分别设置相应的信号量。当需利用信号量来实现同一进程中各线程之间的同步时,可调用创建信号量的命令来创建一私用信号量,其数据结构存放在应用程序的地址空间中。私用信号量属于特定的进程所有,操作系统并不知道私用信号量的存在。 线程间的同步和通信 公用信号量(public semaphore)是为实现不同进程间或不同进程中各线程之间的同步而设置的,它供所有的进程使用,其数据结构是存放在受保护的系统存储区中,也称为系统信号量。公用信号量是一种比较安全的同步机制。 线程的实现 从实现的角度看,线程可分为用户级线程ULT(user-level threads)和内核级线程KLT(kernel-supported threads),分别在用户空间和核心空间实现。也有一些系统提供了混合式线程,同时支持两种线程实现。 线程的实现 用户级线程仅存在于用户空间中,与内核无关。为了对用户级线程进行管理,操作系统提供一个在用户空间执行的线程库,该线程库提供创建、调度、撤消线程功能,同时该线程库也提供线程间的通信、线程的执行以及存储线程上下文的功能。因此对于设置了用户级线程的系统,其调度仍是以进程为单位进行的。 内核支持线程类似于进程,无论系统线程还是用户线程,其创建、切换、撤消等,由操作系统内核支持完成,以线程为单位调度。 线程的实现 线程的实现 由于纯KLT和纯ULT各有优缺点,如果将两种方法结合起来,则可得到两者的全部优点。将两种方法结合起来的系统称为多线
文档评论(0)