注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

C++11及BOOST特性之十对线程使用的一些更正  

2014-05-07 17:08:16|  分类: C++(VC)编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

C++11BOOST特性之十对线程使用的一些更正

 

C++11BOOST特性之二线程之一创建线程”中,提到线程的局部变量创建,会引起一些问题,当时的代码如下:

Void ThreadFun(std:string s)

{

While(1)

{

…..

}

}

Std::thread oktest;

Void Test::TestThreadCreate()

{

    Oktest = std::thread(ThreadFun,”test”);  //第一种情况

         Std::thread test(ThreadFun,”test”);      //第二种情况

    Std::test.join();

}

说得是第二种情况,但是今天做测试发现不是这样,其实和以前创建普通线程一样,没有问题的,局部变量只是释放线程对象本身,并没有在所有条件下终止程序,注意,所有条件,也就是说,有的情况下是可以终止的,看其源码会发现:

thread的析构函数:

         ~thread() _NOEXCEPT

                   {       // clean up

                   if (joinable())

                            _XSTD terminate();

                   }

所以说,如果使用deatch函数后,线程跟随主线程一起被操作系统回收各种资源,而使用join函数后,主线程就得等着这个创建的线程完成后才退出。这个跟C#中的线程类似,如果不设置成后台,主进程也无法退出。只有在joinable()的时候儿,线程才会被析构函数强行终止,这是一种不安全的方法。

学习看来真得有一个不断否定之否定的过程。

  评论这张
 
阅读(454)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017