跳转至

std::thread

简介

c++标准库中提供两种方法来创建线程,分别为std::asyncstd::thread,本章主要介绍std::thread的相关用法。

c++中通过std::thread类来创建一个新的线程,传入一个可调用的对象 或函数,同时传入函数所需要的相关参数。

示例

创建线程

通过实例化std::thread并传入相关的可调用函数及所需的参数来创建一 个新的线程,当线程创建完成之后就进入线程就绪队列等待运行

void printValue(int j){
    std::cout << j << std::endl;
}

//创建一个线程 t,运行 printValue,并传入'3'作为参数
std::thread t(printValue, 3); 

等待线程完成

在线程t1创建完成后,t1实例便和正在运行的线程绑定在一起,必须在合适的地方调用std::thread::join()来等待线程的完成或者调用std::thread::detach()来分离线程。

当函数fun1调用std::thread::join()后,会导致fun1阻塞,直到 线程完成并退出。

//等待线程 t 完成并退出
t.join();
//或者分离线程
//t.detach();

线程是否可以join

通过调用std:thread::joinable()来判断线程是否可以joindetach.

if (t.joinable()){
    t.join();
    //t.detach();
}

thread中的异常

  1. thread对象退出作用域时,要检测joinable的状态,在状态为true 的时候退出作用域会抛出异常

  2. 当向joinabletruethread对象赋值新的对象时,会导致 抛出异常