首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

12.0 概述

本章描述了如何使用由William Kempf实现的Boost线程库用C++语言来实现多线程程序。Boost是一个开源可移植的高性能类库集合,它包含从简单的数据结构到复杂的分析框架。Boost线程库是一个多线程的框架。更多的关于Boost的信息,请参考www.boost.org。

标准C++本身并不支持多线程,因此你不能像使用其他的一些标准库的类如string、vector、list等那样来写出可移植的多线程代码。而Boost线程库就是在为实现一个标准的可移植的多线程上做的一些努力,并且它旨在使得那些多线程的共同的一些令人头痛的问题降到最少。

当你使用其他的标准库或者第三方类库时,只需把它解压缩到一个目录下面,然后使用#include宏把它包含到你的头文件中,然后就使用它来编码,然而使用多线程库可不这么简单。即使是一个很小的多线程应用程序,你都必须小心使用一些已经证明过的设计模式和一些公认的技巧来避免错误的出现。典型地,在一个单线程的应用系统中,你很容易发现一些通常的编程错误:off-by-one循环、引用一个空的或已删除的指针、浮点数转换过程中精度的丧失等等。而多线程程序就很不相同。不但是在你调试器中跟踪多个线程的运行很乏味,而且多线程程序是非确定的,也就是说程序的错误可能仅在一个很罕见的或非常复杂的环境中才出现。

这一章不是给你介绍关于多线程编程的。如果你以前使用过线程来写程序,但没有使用C++或者这个Boost线程库,那么这一章非常适合你。但这一章并不介绍那些基本的多线程编程,关于这些你需要读一些其他的有关多线程的书籍,尽管这些主题的著作比较少见,因为大部分程序员都不使用线程(尽管他们不应该这样)。

大部分的Boost库文档和接下来的章节都讨论那些实用概念/模型的类。一个概念就是某个事物的一个抽象的描述,常常是一个类和它的行为,但不考虑它的实现。典型地,这个描述包含构造行为和析构行为,并且每一个这种方法都包含它们的前置条件、参数和后置条件。例如,互斥体的概念就是一个能被某个线程在某个时候锁定或解锁的事物。一个模型就是一个概念的一个具体表现,如Boost线程库中的mutex类。某个概念的一个精炼就是这个概念的某种特殊化,如一个ReadWriteMutex就是一个带有某些附加行为的互斥体。

最后,线程只做这三件事中的某种一种:执行中、等待某个事物,或者准备执行但等待某个事物或者正在处理中。这些状态分别叫做运行run、等待wait和准备好ready。这些术语在以后的几节中都要用到。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论