thread库位于名字空间boost,为了使用thread库需要包含头文件<boost/thread.hpp>。
thread对象是不可拷贝的。
当成功创建一个thread对象后,线程就立刻开始执行。
#include <boost/thread.hpp>
#include <boost/ref.hpp>
#include <iostream>
template<typename T>
class basic_atom :boost::noncopyable // 原子操作的计数器,可在多线程环境下正确计数
{
private:
T n;
typedef boost::mutex mutex_t; // 互斥量类型定义
mutex_t mu;
public:
basic_atom(T x = T()) :n(x){}
T operator++() // 前置式递增操作符
{
mutex_t::scoped_lock lock(mu); // 锁定互斥量
return ++n;
}
operator T() // 类型转换操作符定义
{
return n;
}
};
typedef boost::mutex mutex_t;
typedef basic_atom<int> atom_int;
mutex_t io_mu;
void printing(atom_int &x, const std::string &str)
{
for (int i = 0; i < 5; i++)
{
mutex_t::scoped_lock lock(io_mu);
std::cout << str << ++x << std::endl;
}
}
int main()
{
atom_int x;
// 使用临时thread对象启动线程
boost::thread t1(printing, boost::ref(x), "first"); // 向函数传递参数,使用ref库传递引用
boost::thread t2(printing, boost::ref(x), "second");
boost::thread t3(boost::bind(printing, boost::ref(x), "third")); // bind表达式
t1.join(); // 阻塞等待直到线程结束
t2.join();
t3.join();
return 0;
}
运行截图: