# std::jthread::detach

< cpp‎ | thread‎ | jthread

void detach(); |  | (C++20 起)

从 jthread 对象分离执行线程，允许执行独立地持续。一旦该线程退出，则释放任何分配的资源。

调用 `detach` 后 *this 不再占有任何线程。

### 参数

（无）

### 返回值

（无）

### 后条件

joinable 为 false

### 异常

若 joinable() == false 或出现任何错误则为 std::system_error 。

### 示例

    #include <iostream>
    #include <chrono>
    #include <thread>

    void independentThread()
    {
        std::cout << "Starting concurrent thread.\n";
        std::this_thread::sleep_for(std::chrono::seconds(2));
        std::cout << "Exiting concurrent thread.\n";
    }

    void threadCaller()
    {
        std::cout << "Starting thread caller.\n";
        std::jthread t(independentThread);
        t.detach();
        std::this_thread::sleep_for(std::chrono::seconds(1));
        std::cout << "Exiting thread caller.\n";
    }

    int main()
    {
        threadCaller();
        std::this_thread::sleep_for(std::chrono::seconds(5));
    }

可能的输出：

    Starting thread caller.
    Starting concurrent thread.
    Exiting thread caller.
    Exiting concurrent thread.

### 引用

- C++20 标准（ISO/IEC 14882:2020）：

  - 32.4.3.2 Members [thread.jthread.mem]

### 参阅

join | 等待线程完成其执行 (公开成员函数)
joinable | 检查线程是否可合并，即潜在地运行于平行环境中 (公开成员函数)