Boost线程库

 

Boost线程库

Bill Kempf

译:伐木工

        标准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平台下工作。

    创建线程

    就像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函数在它执行完毕之后结束。

    互斥体 

    任何写过多线程程序的人都知道避免不同线程同时访问共享区域的重要性。如果一个线程要改变共享区域中某个数据,而与此同时另一线程正在读这个数据,那么结果将是未定义的。为了避免这种情况的发生就要使用一些特殊的原始类型和操作。其中最基本的就是互斥体(mutex,mutual exclusion的缩写)。一个互斥体一次只允许一个线程访问共享区。当一个线程想要访问共享区时,首先要做的就是锁住(lock)互斥体。如果其他的线程已经锁住了互斥体,那么就必须先等那个线程将互斥体解锁,这样就保证了同一时刻只有一个线程能访问共享区域。

    互斥体的概念有不少变种。Boost线程库支持两大类互斥体,包括简单互斥体(simple mutex)和递归互斥体(recursiv

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: boost程序是一个开源、跨平台、高效的C++程序。它提供了丰富的功能模块,涵盖了从基本的数据结构到高级功能的庞大范围,可以帮助开发者更加高效地编写C++程序。 在boost程序中,有许多重要的模块。比如:boost智能指针,提供了多种智能指针类型,可以提高内存管理的灵活性和安全性;boost正则表达式,提供了强大的正则表达式匹配和替换功能;boost线程,为多线程编程提供了丰富的工具和模型;boost日期时间,可以方便地处理日期、时间和时间段;boost文件系统,提供了对文件和目录的操作功能;boost序列化,可以将对象转化为字节序列,并实现对象的序列化和反序列化等。 在使用boost程序时,首先需要下载和安装boost源码,然后在编译时添加相关的头文件路径和文件路径。通过包含需要的boost头文件,就可以使用相应功能模块的类和函数了。在编写代码时,可以参考boost官方文档和示例代码,对于一些特定的问题,也可以查找boost用户社区进行解决方案的讨论。 总的来说,boost程序C++开发者的重要工具之一,它的广泛应用可以提高开发效率和代码质量。boost程序探秘的过程,是对C++编程知识的巩固和扩展的过程,也能够帮助开发者更好地理解和掌握C++语言的特性和编程技巧。 ### 回答2: boost程序是一个非常受欢迎的开源C++程序,被广泛用于增强C++语言的功能和性能。它提供了众多的,涵盖了从基础的数据结构到高级的算法等各个方面。 首先,boost程序提供了许多常用的工具类和函数模板,例如智能指针、容器、字符串处理等,能够极大地简化开发工作,提高代码的可读性和可维护性。 其次,boost还提供了一些用于处理底层系统和网络编程的,例如文件系统、正则表达式、多线程等,这些可以帮助程序员更好地与操作系统进行交互,实现更高效和稳定的程序。 另外,boost还提供了一些用于数学计算和科学计算的,例如随机数生成、线性代数、图像处理等,这些可以方便地进行复杂的数学运算,支持科研和工程领域的应用。 此外,boost还特别注重跨平台性和标准化,在不同操作系统和编译器下都能够保持良好的兼容性。它严格遵循国际标准C++,并在其基础上进行扩展,提供了一些新的特性,使得开发者能够更好地利用C++语言的潜力。 总的来说,boost程序是一个非常强大和实用的工具集,它能够帮助C++程序员提高开发效率,实现更高级和更复杂的功能。无论你是刚入门还是经验丰富的程序员,都可以从boost中找到适合自己的工具和。无论是商业项目还是学术研究,boost都能够提供强大的支持。 ### 回答3: Boost程序探秘是一本介绍Boost程序的书籍。Boost是一个开放源代码的C++社区,提供了许多高质量、可重用的。这本书的目的是帮助读者深入了解Boost,并教会他们如何使用和扩展这些。 首先,这本书详细介绍了Boost的不同部分和功能。Boost包含了许多模块,涵盖了从基础数据结构到高级算法的各个领域。读者将学习到Boost中每个模块的主要功能和使用方法。 其次,本书还提供了许多实际示例和案例研究,帮助读者更好地理解Boost的使用。这些示例涵盖了各种场景,包括网络编程、多线程编程、数值计算等等。通过实践,读者可以掌握如何在自己的项目中应用Boost。 此外,本书还介绍了Boost的扩展和定制。Boost的设计非常灵活,允许用户根据自己的需求进行扩展和定制。通过阅读本书,读者将学会如何为Boost编写自定义代码,以满足特定的需求。 总之,Boost程序探秘是一本很好的学习Boost的资料。无论是刚开始接触Boost的初学者,还是已经对Boost库有一定了解的开发者,都能从这本书中获得宝贵的知识和经验。通过探索Boost,读者将能够提升自己的C++编程技能,并开发出更高效、可靠的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

famugong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值