# std::jthread::detach

From cppreference.com
< cpp‎ | thread‎ | jthread

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

Separates the thread of execution from the jthread object, allowing execution to continue independently. Any allocated resources will be freed once the thread exits.

After calling `detach` *this no longer owns any thread.

### Parameters

(none)

### Return value

(none)

### Postconditions

joinable is false.

### Exceptions

std::system_error if joinable() == false or an error occurs.

### Example

Run this code

    #include <chrono>
    #include <iostream>
    #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));
    }

Possible output:

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

### References

- C++23 standard (ISO/IEC 14882:2024):

  - 33.4.4.3 Members [thread.jthread.mem]

- C++20 standard (ISO/IEC 14882:2020):

  - 32.4.3.2 Members [thread.jthread.mem]

### See also

join | waits for the thread to finish its execution (public member function)
joinable | checks whether the thread is joinable, i.e. potentially running in parallel context (public member function)
C documentation for thrd_detach

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/thread/jthread/detach&oldid=129258"