多线程应用环境和线程对象模型.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多线程应用环境和线程对象模型 本文阐述多线程应用程序如何利用面向对象方法来解决线程安全性问题,并给出 了针对两种类型的同步对象如何进行面向对象封装的例子,最后在对 CWinThread 类进 行简单分析后给出一个完全封装版本的 Thread 模型。 18.1 引言 18.1 引言 1188..11 引引言言 当下的信息技术已经进入网络时代和分布式计算时代,也是多核时代和并行处理 时代!操作系统是多任务和多线程的,数据库是多任务和多线程的,服务器是多任务 的和多线程的,浏览器也是多任务和多线程的,一切都将是多任务和多线程的。这是 一个多任务和多线程的世界! 一提到进程和线程,人们往往首先会想到 CreateProcess()、TerminateProcess()、 CreateThread()、ExitThread()、TerminateThread()、SuspendThread()和 ResumeThread() 等这样的 Win32API 函数,或者 pthread_create()、pthread_exit()、pthread_kill()等 POSIX 线程库函数,甚至是 C 库函数_beginthread()、_endthread()及其扩展版本和 MFC 库函 数 AfxBeginThread(),等等。这些 API 函数为多进程和多线程应用程序的编写提供了 基本的线程控制手段,但是都是面向过程的。面向过程的应用程序本身是非模块化的, 到处充斥着全局变量和全局函数,十分难于管理和维护;如果是面向过程的多线程应 用程序,那么加上各个线程函数之间可能的共享全局变量和各种共享资源,就会使管 理和维护的难度成倍地增加。 其实多任务程序(多进程和多线程)的概念、优点和开发方法已经有很多资料和 书籍都讲述过了(网上可以搜出一大堆)。通过阅读这些书籍、资料和文章,我们已经 对进程和线程建立起了如下基本的认识: � 现代的多任务操作系统允许同时运行多个应用程序也就是多个进程; � 现代的多任务操作系统也允许一个进程创建多个子进程; � 现代的多任务操作系统允许一个进程创建多个线程并可在同一时刻执行这些 线程; � 进程启动时实际上是由操作系统创建了一个进程数据结构并接着创建一个线 程后开始执行的,这个线程就是主线程,然后可以在任何线程中再创建其他 线程; � 进程是一个管理多个线程、多个模块(动态链接库和子进程)以及各种资源 的大型数据结构,而不是真正的执行体。线程才是操作系统分配 CPU时间的 基本执行单位(基本调度对象); � 进程管理的资源包括虚拟地址空间、代码、各种文件和数据、动态分配来的 内存、端口、句柄、环境变量、设备和命令行参数等等,进程内的各个线程 可以共享这些资源; � 每个线程都有自己独立的一套上下文环境(即一组寄存器状态和优先级)和 独立的堆栈,操作系统进行线程切换时会用到它们; � 进程中的多个线程可以执行该进程中相同的代码片段(同时或不同时),也就 是代码重入; � 操作系统调度线程就是用一个硬件定时器和一套复杂的游戏规则(优先级管 理)把 CPU 时间轮流分配给各个线程(即上下文切换),以使各个线程都有 机会在 CPU(单个或多个)上得到执行。通常 CPU 时间片的长度为几十个 毫秒; � 线程切换会发生在同一个进程内的两个线程间,也会发生在不同进程的两个 线程间。如果是后者,就会先进行两个进程的上下文切换,然后再在其中进 行线程的上下文切换; � 现代的抢占式多任务操作系统不会保证两个线程的执行顺序,我们也无法预 测两个线程的执行顺序,所以我们绝对不能假设两个线程的执行顺序。这正 是产生竞争条件的原因,也是需要使用同步机制的理由; � 在单处理器平台上,操作系统只能轮流调度各个线程,由于线程切换非常快, 所以就给用户造成“多个线程并行执行” 的假象,这是宏观上的并行处理; � 在多处理器平台上,支持 SMP(对称多处理)技术的操作系统就可以让各个 线程在单独的处理器上同时执行甚至直到线程结束,可以同时执行的线程数

文档评论(0)

ygxt89 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档