c++多线程问题detach和join

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

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

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

http://blog.csdn.net/liuxuejiang158blog/article/details/17068723

C++中一般使用lambda表达式http://blog.gclxry.com/c-plus-plus-multi-thread/

并不需要线程结束前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;
}