# std::thread::joinable

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

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

Checks if the 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)

### Return value

true if the thread object identifies an active thread of execution, false otherwise

### Exceptions

`noexcept` specification:
noexcept

### Example

Run this code

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

    void foo()
    {
        std::this_thread::sleep_for(std::chrono::seconds(1));
    }

    int main()
    {
        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';
    }

Output:

    before starting, joinable: 0
    after starting, joinable: 1
    after joining, joinable: 0

### See also

get_id (C++11) | returns the id of the thread (public member function)
join | waits for a thread to finish its execution (public member function)
detach | permits the thread to execute independently from the thread handle (public member function)

### References

- C++11 standard (ISO/IEC 14882:2011):

  - 30.3.1.5 thread members [thread.thread.member]

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/thread/thread/joinable&oldid=91580"
Category:

- unconditionally noexcept

Hidden categories:

- Pages with unreviewed unconditional noexcept template
- Pages with unreviewed noexcept template