【C++多线程】detach,及注意

  detach()的作用是将子线程和主线程的关联分离,也就是说detach()后子线程在后台独立继续运行,主线程无法再取得子线程的控制权即使主线程结束,子线程未执行也不会结束。当主线程结束时,由运行时库负责清理与子线程相关的资源。实际应用如让一个文字处理应用同时编辑多个文档,让每个文档处理窗口拥有自己的线程,每个线程运行同样的代码,并隔离不同窗口处理的数据。

 1 #include <thread>
 2 #include <iostream>
 3 
 4 using namespace std;
 5 
 6 void func()
 7 {
 8     cout << "子线程func开始执行!" << endl;
 9     //do something
10     cout << "子线程func执行结束!" << endl;
11 }
12 
13 int main()
14 {
15     cout << "主线程main开始执行!" << endl;
16     thread t(func);
17     t.detach();
18     cout << "主线程main执行结束!" << endl;
19     return 0;
20 }

注意

  detach()同时也带来了一些问题,如子线程要访问主线中的对象,而主线中的对象又因为主线程结束而被销毁时,会导致程序崩溃。所以传递参数时需要注意一些陷阱。关于参数传递:https://www.cnblogs.com/chen-cs/p/13056703.html  

  1、访问主线程对象以及指针问题

  2、构造线程时隐式转换问题,子线程可以还来不及转换,主线程对象就销毁了,解决方法是构造线程时,构造一个临时对象传入