首页 考试吧论坛 Exam8视线 考试商城 网络课程 模拟考试 考友录 实用文档 缤纷校园 英语学习 | ||
2010考研 | 自学考试 | 成人高考 | 专 升 本 | 法律硕士 | MBA/MPA | 中 科 院 | ||
四六级 | 商务英语 | 公共英语 | 职称日语 | 职称英语 | 博思 | 口译笔译 | GRE GMAT | 日语 | 托福 | ||
雅思 | 专四专八 | 新概念 | 自考英语 | 零起点英、法、德、日、韩语 | 在职申硕英语 | ||
在职攻硕英语 | 成人英语三级 | ||
等级考试 | 水平考试 | 微软认证 | 思科认证 | Oracle认证 | Linux认证 | ||
公务员 | 报关员 | 报检员 | 外销员 | 司法考试 | 导游考试 | 教师资格 | 国际商务师 | 跟单员 | ||
单证员 | 物流师 | 价格鉴证师 | 银行从业资格 | 证券从业资格 | 人力资源管理师 | 管理咨询师 | ||
期货从业资格 | 社会工作者 | ||
会计职称 | 注会CPA | 经济师 | 统计师 | 注册税务师 | 评估师 | 精算师 | 高会 | ACCA | 审计师 | ||
法律顾问 | 会计证 | ||
一级建造师 | 二级建造师 | 造价师 | 监理师 | 安全师 | 咨询师 | 结构师 | 建筑师 | 安全评价师 | ||
房地产估价师 | 土地估价师 | 设备监理师 | 岩土工程师 | 质量资格 | 房地产经纪人 | 造价员 | ||
投资项目管理 | 土地代理人 | 环保师 | 环境影响评价 | 物业管理师 | 城市规划师 | 公路监理师 | ||
公路造价工程师 | 招标师 | ||
执业护士 | 执业医师 | 执业药师 | 卫生资格 |
线程库是基础库系统中一个重要的组成模块。设计线程库时,应该首先考虑它的模型的建立,以及它应该所涵盖的功能。主要包括有用于线程间互斥和同步控制的功能实现与封装,线程的创建、运行和销毁,以及访问并控制线程的一些运行状态或错误状态等。另外线程库也涉及到,线程之间的数据共享或数据通信等功能的实现。下面我们主要介绍两种有代表性的线程库的实现,也即MFC中的线程库和JDK平台中的线程模型。
MFC中为了实现线程间互斥和同步控制功能,主要提供有四种类型的对象,如图10-57所示,包括CCriticalSection、CEvent、CMutex以及CSemaphore等。
首先介绍CMutex类型,它是对NT操作系统内核中提供的互斥对象(mutex)的封装。它能够确保线程拥有对单个资源的互斥访问权,也即多线程对共享资源的互斥访问。互斥对象包含一个使用数量,一个线程ID和一个递归计数器。并且线程在等待访问资源时可以设定一个超时值。
CCriticalSection类型是对临界区(critical section)的封装。它的作用与特性和CMutex类似,都是用于线程间对共享资源的互斥访问,但是它与CMutex之间稍有不同的是,它不属于内核对象,而是属于用户方式的对象。所以它的效率要比CMutex高很多,并且因为如此,它也只能被用于线程之间的互斥控制,而不能用于进程之间的互斥。
CEvent是对事件(event)内核对象的封装,它是一个最基本,也最灵活的,被用于线程间实现同步的控制对象。CEvent能够通知一个操作已经完成。它有两种不同类型的事件对象。一种是人工重置的事件,另一种是自动重置的事件。当人工重置的事件得到通知时,等待该事件的所有线程均变为可调度线程。当一个自动重置的事件得到通知时,等待该事件的线程中只有一个线程变为可调度线程。
最后一个就是CSemaphore类型,它是对信号量(Semaphore)内核对象的封装。适用于线程之间的同步控制,它是功能最强、使用最灵活,也最复杂的同步控制对象。
除了上面讲述到的几种用于实现线程间互斥和同步的控制对象外,MFC的线程库中还有一个非常重要的类模块,也即CWinThread,它是表示应用程序中的执行线程,管理线程的创建、运行和销毁,以及其它许多方面的功能(如线程优先级、状态等)。