初识线程

  1. #include <iostream>
  2. #include <thread>
  3. using namespace std;
  4. void function(){
  5. cout<<"thread_functon"<<endl;
  6. }
  7. int main(){
  8. thread th_function(function);
  9. th_function.join();
  10. return 0;
  11. }
  • main函数也是一个线程,为主线程
  • thread为线程类,声明一个类,并用括号内的映射函数实例化
  • join为thread类的方法,实现线程的等待,上面的例子中,当th_function线程结束后,主线程才会退出
  • 与join方法对立的是detach方法(detach:分离),使主线程与th_function线程无关,会导致th_function线程没有机会执行,主线程结束,退出程序,无法打印内容

注意 :一个线程被detach之后就不可再被join,编译可以通过,但是运行会出错。可以使用joinable方法判断

  1. #include <iostream>
  2. #include <thread>
  3. using namespace std;
  4. void function(){
  5. cout<<"thread_functon"<<endl;
  6. }
  7. int main(){
  8. thread th_function(function);
  9. th_function.detach();
  10. if(th_function.joinable()){
  11. th_function.join();
  12. }
  13. return 0;
  14. }

异常保护

  1. #include <iostream>
  2. #include <thread>
  3. using namespace std;
  4. void function(){
  5. cout<<"thread_functon"<<endl;
  6. }
  7. int main(){
  8. thread th_function(function);
  9. cout<<"main_function"<<endl;
  10. th_function.join();
  11. return 0;
  12. }
  • 线程之间不做异常处理的话会导致一个线程的异常影响到另一个线程的运行
  • 如上例,如果主线程的运行部分 cout<<"main_function"<<endl; 出现异常
  • 会导致主线程的提前结束,而无法执行 th_function.join(); 导致function线程没有机会运行
  • 需要做异常保护,如果主线程出了问题也不会影响function线程的运行,真正做到互不影响 ```cpp

    include

    include

    using namespace std; void function(){ cout<<”thread_functon”<<endl; } int main(){ thread th_function(function);

    try{

    1. cout<<"main_function"<<endl;

    } catch(…){

    1. th_function.join();

    }

    th_function.join(); return 0; }

```

  • catch(...) 意味当发生任何异常时