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; }
运行截图: