Thread::joinable is an in-built function in C++ std::thread. It is an observer function which means it observes a state and then returns the corresponding output and checks whether the thread object is joinable or not.
A thread object is said to be joinable if it identifies/represent an active thread of execution.
A thread is not joinable if:
- It was default-constructed
- If either of its member join or detach has been called
- It has been moved elsewhere
Syntax:
std::thread::joinable()
Parameters: This function does not accepts any parameters.
Return Value: It is a boolean type function and returns true when the thread object is
joinable. It returns false if the thread object is not joinable.
The following program demonstrate the use of std::thread::joinable()
Note: On the online IDE this program will show error. To compile this, use the flag “-pthread” on g++ compilers compilation with the help of command “g++ –std=c++14 -pthread file.cpp”.
// C++ program to demonstrate the use of // std::thread::joinable() #include <chrono> #include <iostream> #include <thread> using namespace std;
// function to put thread to sleep void threadFunc()
{ std::this_thread::sleep_for(
std::chrono::seconds(1));
} int main()
{ std:: thread t1; // declaring the thread
cout << "t1 joinable when default created? \n" ;
// checking if it is joinable
if (t1.joinable())
cout << "YES\n" ;
else
cout << "NO\n" ;
// calling the function threadFunc
// to put thread to sleep
t1 = std:: thread (threadFunc);
cout << "t1 joinable when put to sleep? \n" ;
// checking if t1 is joinable
if (t1.joinable())
cout << "YES\n" ;
else
cout << "NO\n" ;
// joining t1
t1.join();
// checking joinablity of t1 after calling join()
cout << "t1 joinable after join is called? \n" ;
if (t1.joinable())
cout << "YES\n" ;
else
cout << "NO\n" ;
return 0;
} |
Output:
t1 joinable when default created? NO t1 joinable when put to sleep? YES t1 joinable after join is called? NO
Note: The third output will appear 1 sec later because the thread was put to sleep for 1 minute.