c++的boost库多线程(Thread)编程(线程操作,互斥体mutex,条件变量)详解
Boost是由C++标准委员会类库工作组成员发起,致力于为C++开发新的类库的组织。许多C++专家都投身于Boost线程库的开发中。所有接口的设计都是从0开始的,并不是C线程API的简单封装。许多C++特性(比如构造函数和 析构函数,函数对象(function object)和模板)都被使��在其中以使接口更加灵活。现
在的版本可以在POSIX,Win32和Macintosh Carbon平台下工作。
1 boost库创建线程
就像std::fstream类就代表一个文件一样,boost::thread类就代表一个可执行的线程。缺省构造函数创建一个代表当前执行线程的实 例。一个重载的构
造函数以一个不需任何参数的函数对象作为参数,并且没有返回值。这个构造函数创建一个新的可执行线程,它调用了那个函数对象。
起先,大家认为传统C创建线程的方法似乎比这样的设计更有用,因为C创建线程的时候会传入一个void*指针,通过这种方法就可以传入数据。然而, 由
于Boost线程库是使用函数对象来代替函数指针,那么函数对象本身就可以携带线程所需的数据。这种方法更具灵活性,也是类型安全(type- safe)的。当和
Boost.Bind这样的功能库一起使用时,这样的方法就可以让你传递任意数量的数据给新建的线程。目前,由Boost线程库创建的线程对象功能还不是很强大。事
实上它只能做两项操作。线程对象可以方便使用==和!=进行比较来确定它们是否是代表 同一个线程;你还可以调用boost::thread::join来等待线程执行完毕
。其他一些线程库可以让你对线程做一些其他操作(比如设置优先级,甚 至是取消线程)。然而,由于要在普遍适用(portable)的接口中加入这些操作不是
简单的事,目前仍在讨论如何将这些操组加入到Boost线程库中。
boost库多线程(Thread)用法举例1:
2 boost库多线程中的互斥体
任何写过多线程程序的人都知道避免不同线程同时访问共享区域的重要性。如果一个 线程要改变共享区域中某个数据,而与此同时另一线程正在读这个数
据,那么结果将是未定义的。为了避免这种情况的发生就要使用一些特殊的原始类型和操作。其中最基本的就是互斥体(mutex,mutual e