std::thread::detach(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

πŸ’… std::thread::detach(3) πŸ’…

okay so bestie, welcome to std::thread::detach(3) from the C++ Standard Libary manual β€” spelling exactly as the page has it, we respect the lore πŸ’–

✨ NAME ✨

std::thread::detach β€” std::thread::detach (yes it's giving β€œname so nice they named it twice” πŸ’…)

πŸ¦‹ Synopsis πŸ¦‹

void detach();

(since C++11) β€” that's the whole signature, no args, no return.

detach() separates the thread of execution from the thread 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. periodt.

πŸŽ€ Parameters πŸŽ€

(none) β€” literally none, bestie.

πŸŽ€ Return value πŸŽ€

(none) β€” also none.

πŸŽ€ Postconditions πŸŽ€

joinable is false. that's the vibe check after detach πŸ’…

πŸŽ€ Exceptions πŸŽ€

std::system_error if joinable() == false or an error occurs. not me getting an exception over here 😭

πŸ’» Example πŸ’»

// Run this code β€” here's the whole demo, bestie:

#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::thread 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:2023):
    • 33.4.3.6 Members [thread.thread.member]
  • C++20 standard (ISO/IEC 14882:2020):
    • 32.4.2.5 Members [thread.thread.member]
  • C++17 standard (ISO/IEC 14882:2017):
    • 33.3.2.5 thread members [thread.thread.member]
  • C++14 standard (ISO/IEC 14882:2014):
    • 30.3.1.5 thread members [thread.thread.member]
  • C++11 standard (ISO/IEC 14882:2011):
    • 30.3.1.5 thread members [thread.thread.member]

πŸ‘€ See also πŸ‘€

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

that's the whole page, bestie 🫢 source: http://cppreference.com β€’ version/date: 2024.06.10 β€’ mwah πŸ’‹

πŸ“¦ where this page comes from