- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CBoostThread编程指南(国外英语资料)
C++ Boost Thread 编程指南(国外英语资料)
C++ Boost线程编程指南
0前言
标准C++线程即将到来。其中预言它将衍生自升压线程库,现在就由比尔带领我们探索一下升压线程库。
就在几年前,用多线程执行程序还是一件非比寻常的事。然而今天互联网应用服务程序普遍使用多线程来提高与多客户链接时的效率;为了达到最大的吞吐量,事务服务器在单独的线程上运行服务程序;桂应用程序将那些费时,复杂的处理以线程的形式单独运行,以此来保证用户界面能够及时响应用户的操作。这样使用多线程的例子还有很多。
但是C++标准并没有涉及到多线程,这让程序员们开始怀疑是否可能写出多线程的C++程序。尽管不可能写出符合标准的多线程程序,但是程序员们还是会使用支持多线程的操作系统提供的多线程库来写出多线程C++程序。但是这样做至少有两个问题:这些库大部分都是用语言完成的如果在C,C++程序中要使用这些库就必须十分小心;还有,每一个操作系统都有自己的一套支持多线程的类库。因此,这样写出来得代码是没有标准可循的,也不是到处都适用的(非便携式)。提高线程库就是为了解决所有这些问题而设计的。
提高是由C++标准委员会类库工作组成员发起,致力于为C++开发新的类库的组织。现在它已经有近2000名成员。许多库都可以在升压源码的发布版本中找到。为了使这些类库是线程安全的(线程安全),提高线程库被创建了。
许多C++专家都投身于升压线程库的开发中。所有接口的设计都是从0开始的,并不是C线程API的简单封装。许多C++特性(比如构造函数和析构函数,函数对象(函数对象)和模板)都被使用在其中以使接口更加灵活。现在的版本可以在POSIX,Win32和Macintosh碳平台下工作。
1创建线程
就像std::fstream类就代表一个文件一样,升压::螺纹类就代表一个可执行的线程。缺省构造函数创建一个代表当前执行线程的实例。一个重载的构造函数以一个不需任何参数的函数对象作为参数,并且没有返回值这个构造函数创建一个新的可执行线程,它调用了那个函数对象。
起先,大家认为传统C创建线程的方法似乎比这样的设计更有用,因为C创建线程的时候会传入一个void *指针,通过这种方法就可以传入数据。然而,由于升压线程库是使用函数对象来代替函数指针,那么函数对象本身就可以携带线程所需的数据。这种方法更具灵活性,也是类型安全(安全型)的。当和绑定这样的功能库一起使用时,这样的方法就可以让你传递任意数量的数据给新建的线程提振。
目前,由升压线程库创建的线程对象功能还不是很强大。事实上它只能做两项操作。线程对象可以方便使用= =和!=进行比较来确定它们是否是代表同一个线程;你还可以调用boost::螺纹::加入来等待线程执行完毕。其他一些线程库可以让你对线程做一些其他操作(比如设置优先级,甚至是取消线程)。然而,由于要在普遍适用(便携式)的接口中加入这些操作不是简单的事,目前仍在讨论如何将这些操组加入到升压线程库中。
listing1展示了boost::螺纹类的一个最简单的用法。新建的线程只是简单的在std::上打印“你好了,
World, and the main function ends after it has been executed.
Example 1:
#include boost/thread/thread.hpp
#include iostream
Void, hello ()
{
Std:: cout
Hello, world, Im, a, thread.!
Std:: endl;
}
Int main (int, argc, char*, argv[])
{
Boost:: thread thrd (hello);
Thrd.join ();
Return 0;
}
2 mutex
Anyone who writes multithreaded programs knows the importance of avoiding different threads accessing the shared area at the same time. If a thread wants to change a data in a shared area, and at the same time another thread is reading the data, the result will be undefined. To avoid this, some special primitive types and operations are used. The most basic of these is the mutex (mutex, mutual, e
文档评论(0)