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;
}