码迷,mamicode.com
首页 > 编程语言 > 详细

c++11多线程记录1 -- std::thread

时间:2019-10-22 01:08:04      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:thread   UNC   resources   自己的   sources   还需   分离   开始   --   

启动一个线程

话不多说,直接上代码

void func();
int main()
{
    std::thread t(func); //这里就开始启动线程了
    return 0;
}
void func()
{
    std::cout << "Hello, " << std::this_thread::get_id() << std::endl;
}

等待子线程结束

有时候开启一个子线程之后,父线程很快运行结束;
如果想要父线程做完自己的工作之后等待子线程运行完再结束

    ......
    std::thread t(func);
    t.join();
    ......

子线程分离

子线程有很多很多工作需要完成,父线程不想等待它,这时候可以用detach

    ......
    std::thread t(func);
    t.detach();

子线程分离后相当于是一个后台线程,这时负责子线程资源回收什么的,是c++运行库而不是父线程了.

注意点

要确保线程运行时所用的资源不会被提前释放

在上面这个小例子里,main线程创建了一个t线程,然后调用t.detach();
如果t线程中使用到了main线程里的某些资源(记作resources),那么就有必要引起注意.
如果main线程工作很少;t线程工作繁重,需要运行很长时间;
当main线程结束时,resources会被释放,然而这时t线程中还需要用到这些resources.
这就是问题所在:####要确保线程运行时所用的资源不会被提前释放

detach和join两者只能用一次

不能调用了detach之后再调用join;也不能调用join之后再调用detach
(测试的时候我就试了先用detach再用join,然后就死了,卡了好一会。。)

c++11多线程记录1 -- std::thread

标签:thread   UNC   resources   自己的   sources   还需   分离   开始   --   

原文地址:https://www.cnblogs.com/ChenLambda/p/11717302.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!