网站大量收购闲置独家精品文档,联系QQ:2885784924

C++_Boost_Thread_编程指南要点.pdf

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C_Boost_Thread_编程指南要点

C++BoostThread C++BoostThread CC++++BBoooossttTThhrreeaadd 编程指南 作者:dozb • C++ Boost Thread 编程指南 o 0 前言 o 1 创建线程 o 2 互斥体 o 3 条件变量 o 4 线程局部存储 o 5 仅运行一次的例程 o 6Boost 线程库的未来 o 7 参考资料: 0 0 00 前言 标准C++线程即将到来。CUJ 预言它将衍生自Boost线程库,现在就由Bill 带领我们探索一 下Boost 线程库。 就在几年前,用多线程执行程序还是一件非比寻常的事。然而今天互联网应用服务程序普遍 使用多线程来提高与多客户链接时的效率;为了达到最大的吞吐量,事务服务器在单独的线 程上运行服务程序;GUI应用程序将那些费时,复杂的处理以线程的形式单独运行,以此来 保证用户界面能够及时响应用户的操作。这样使用多线程的例子还有很多。 但是C++标准并没有涉及到多线程,这让程序员们开始怀疑是否可能写出多线程的 C++程 序。尽管不可能写出符合标准的多线程程序,但是程序员们还是会使用支持多线程的操作系 统提供的多线程库来写出多线程C++程序。但是这样做至少有两个问题:这些库大部分都是 用C 语言完成的,如果在C++程序中要使用这些库就必须十分小心;还有,每一个操作系 统都有自己的一套支持多线程的类库。因此,这样写出来得代码是没有标准可循的,也不是 到处都适用的(non-portable)。Boost线程库就是为了解决所有这些问题而设计的。 Boost是由C++标准委员会类库工作组成员发起,致力于为C++开发新的类库的组织。现在 它已经有近2000名成员。许多库都可以在Boost 源码的发布版本中找到。为了使这些类库是 线程安全的(thread-safe),Boost线程库被创建了。 许多C++专家都投身于Boost线程库的开发中。所有接口的设计都是从0开始的,并不是 C 线程API 的简单封装。许多C++特性(比如构造函数和析构函数,函数对象(function object) 和模板)都被使用在其中以使接口更加灵活。现在的版本可以在POSIX,Win32和Macintosh Carbon 平台下工作。 1 1 11 创建线程 就像std::fstream 类就代表一个文件一样, boost::thread 类就代表一个可执行的线程。缺省 构造函数创建一个代表当前执行线程的实例。一个重载的构造函数以一个不需任何参数的函 数对象作为参数,并且没有返回值。这个构造函数创建一个新的可执行线程,它调用了那个 函数对象。 起先,大家认为传统C 创建线程的方法似乎比这样的设计更有用,因为C 创建线程的时候 会传入一个void*指针,通过这种方法就可以传入数据。然而,由于 Boost线程库是使用函 数对象来代替函数指针,那么函数对象本身就可以携带线程所需的数据。这种方法更具灵活 性,也是类型安全(type-safe) 的。当和Boost.Bind 这样的功能库一起使用时,这样的方法 就可以让你传递任意数量的数据给新建的线程。 目前,由Boost线程库创建的线程对象功能还不是很强大。事实上它只能做两项操作。线程 对象可以方便使用==和!=进行比较来确定它们是否是代表同一个线程;你还可以调用 boost::thread::join来等待线程执行完毕。其他一些线程库可以让你对线程做一些其他操作(比 如设置优先级,甚至是取消线程)。然而,由于要在普遍适用(portable)的接口中加入这些 操作不是简单的事,目前仍在讨论如何将这些操组加入到Boost 线程库中。 Listing1展示了boost::thread 类的一个最简单的用法。 新建的线程只是简单的在 std::out 上 打印“hello,world”,main 函数在它执行完毕之后结束。 例1: #include boost/thread/thread.hpp #include iostream void hello() { std::cout Hello world, Imathread! std::endl; } int main(i

文档评论(0)

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

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

1亿VIP精品文档

相关文档