std::thread::joinable(3)

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

πŸ’… std::thread::joinable πŸ’…

okay so this is the std::thread::joinable(3) page from the C++ Standard Libary manual β€” yes bestie, that's the manual name folded in right here, and we're not copying the header line, we're giving it main character energy instead. It's a tiny baddie of a page, and it's lowkey important. Let's go. πŸ¦‹

πŸŽ€ NAME πŸŽ€

std::thread::joinable β€” std::thread::joinable.

That's the name section doing its little mirror thing, and honestly? iconic. It's the std::thread::joinable member function, no notes. πŸ’…

✨ Synopsis ✨

bool joinable() const noexcept;  (since C++11)

Checks if the std::thread object identifies an active thread of execution.

Specifically, returns true if get_id() != std::thread::id(). So a default constructed thread is not joinable.

A thread that has finished executing code, but has not yet been joined is still considered an active thread of execution and is therefore joinable.

🫢 Parameters 🫢

(none) β€” literally no parameters, not a single one. The parameters section is empty and living its best life. 🫢

🌈 Return value 🌈

true if the thread object identifies an active thread of execution, false otherwise. That's the whole vibe check. βœ…

πŸ“ Example πŸ“

The page says // Run this code, so run it, bestie:

#include <chrono>
#include <iostream>
#include <thread>
using namespace std::chrono_literals;

void foo()
{
    std::this_thread::sleep_for(500ms);
}

int main()
{
    std::cout << std::boolalpha;

    std::thread t;
    std::cout << "before starting, joinable: " << t.joinable() << '\n';

    t = std::thread{foo};
    std::cout << "after starting, joinable: " << t.joinable() << '\n';

    t.join();
    std::cout << "after joining, joinable: " << t.joinable() << '\n';

    t = std::thread{foo};
    t.detach();
    std::cout << "after detaching, joinable: " << t.joinable() << '\n';
    std::this_thread::sleep_for(1500ms);
}

πŸ’– Output πŸ’–

before starting, joinable: false
after starting, joinable: true
after joining, joinable: false
after detaching, joinable: false

πŸ‘‘ 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 πŸ¦‹

  • get_id β€” returns the id of the thread (public member function).
  • join β€” waits for the thread to finish its execution (public member function).
  • detach β€” permits the thread to execute independently from the thread handle (public member function).

mwah πŸ’‹ this lil page is from http://cppreference.com, dated 2024.06.10, and it's the std::thread::joinable(3) page β€” source, version, date, all mentioned, periodt. πŸ’–

πŸ“¦ where this page comes from