博客转载自: http://www.cnblogs.com/lvdongjie/p/4447142.html

1 boost原子变量和线程

#include <boost/thread.hpp>
using namespace boost;
using namespace std; mutex io_mu; // 定认全局互斥变量 /*
* 模板类: 线程安全的计数器,不可拷贝
*/
template<typename T>
class basic_atom : noncopyable
{
private:
T n;
mutex mu;
public:
basic_atom(T x = T()) :n(x) {}
T operator++() {
mutex::scoped_lock lock(mu); //用scoped_lock锁住成员互斥信号变量
return ++n;
}
operator T() { return n; }
}; typedef basic_atom<int> atom_int; // 将模板类定义精简名atom_int int to_interrupt(atom_int& x, const string& str)
{
try
{
for (int i = ; i < ; ++i)
{
this_thread::sleep(posix_time::seconds()); // 此处应该是子线程sleep1秒
mutex::scoped_lock lock(io_mu); //io流非线程安全,必须锁住
cout << str << ": " << ++x << endl;
}
}
catch (thread_interrupted&)
{
cout << "thread interrupted" << endl;
return -;
} return ;
} int main()
{
atom_int x;
thread t(to_interrupt, boost::ref(x), "hello"); // t调用to_interrupt函数,并输出hello x
this_thread::sleep(posix_time::seconds()); //此处应该是主线程睡眠3秒
t.interrupt(); // 调用线程的中断操作
t.join(); // 因为线程已中断,所以线程立即返回 getchar();
return ;
}
t.join()作用
一句话:把当前线程合并到主线程
详细点:
程序的入口点是Main函数
主程序定义了一个线程,这个线程是执行一个延时输出“--”的函数
如果没有这句join,那么程序就会一边执行输出“--”一边执行主程序下面的代码
有了这个join 意思就是大家都在一条线上了,我执行完了才轮到主程序执行。

最新文章

  1. hadoop中MapReduce多种join实现实例分析
  2. HashMap和HashSet
  3. 【凯子哥带你学Framework】Activity界面显示全解析
  4. JSP+Servlet+javabean+oracle实现页面多条件模糊查询
  5. UICollectionView介绍
  6. WebApi:过滤器的种类
  7. Orchard 精简版
  8. .net读取ini配置文件的操作
  9. [wordpress]wp-api-jwt-auth 尝试添加运行在多站点中 need change
  10. (原)SQL Server 系统提供功能的三个疑惑
  11. ubuntu下包管理器apt-get常用命令
  12. Python基础-python流程控制之循环结构(五)
  13. Dynamics AX 中的图片处理
  14. springmvc的@ResponseBody报错
  15. C++调用IDL程序的做法(三)
  16. TableView头视图高度问题
  17. DHT11
  18. x86项目中读取注册表Register数据项的方法
  19. Test Double
  20. struts常量&lt;constant&gt;说明

热门文章

  1. [独孤九剑]Oracle知识点梳理(六)数据库常用对象之Procedure、function、Sequence
  2. Js中的prototype的用法一
  3. 2.Linux下安装Jenkins
  4. Kosaraju
  5. 蓝桥杯 算法训练 ALGO-142 P1103
  6. mongoTemplate操作内嵌文档
  7. Scala的Json序列化
  8. css3弹性布局语法全解
  9. c++如何编写线程安全的DLL
  10. PHP实现常用排序算法(含示意动图)