wkk15903468980
wkk15903468980
2016-11-29 06:20
采纳率: 50%
浏览 5.0k

c++多线程问题detach和join

c++并发编程实战上说,必须在线程结束前调用detach或者jion。如果线程结束再去分离,会出问题。 我的疑问是这么看来的话,c++根本就没有保证安全啊,即便detach在线程运行后一句就立马调用,也不能保证这是在线程结束前调用的啊,在这一块儿c++11是怎么处理的

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • matrixji
    哆啦做梦 2016-11-30 09:59
    已采纳

    join 也好 detach 也罢,其实只要在thread对象销毁前调用,就可以了。和线程的运行函数没有关系的。

    点赞 评论
  • oyljerry
    oyljerry 2016-11-29 06:30

    join就会等待线程执行结束。会阻塞
    detach,join的目的就是要你程序, 比如你程序需要退出了,那么最好是等待线程结束,而不是不管线程的执行。

    点赞 评论
  • feng1790291543
    鱼弦 2016-11-29 06:33
    点赞 评论
  • oyljerry
    oyljerry 2016-11-30 09:09

    并不需要线程结束前join,线程先结束了,join就会直接返回。你可以看下面代码

    #include <iostream>
    #include <thread>
    #include <chrono>
    
    using namespace std;
    
    void fn1()
    {
        std::cout << "fn1" << std::endl;
        return;
    }
    
    int main() {
        // your code goes here
        std::thread t1(fn1);
        std::this_thread::sleep_for(std::chrono::milliseconds(1000));
        std::cout << "begin join" << std::endl;
        t1.join();
        std::cout << "end join" << std::endl;
        return 0;
    }
    
    点赞 评论

相关推荐