- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)