Метод joinable
Метод joinable класса thread проверяет,
можно ли к потоку применить операции join или
detach. Метод не принимает параметров и возвращает
true, если поток является joinable, и false
в противном случае.
Поток считается joinable, если он связан с активным
потоком выполнения. По умолчанию созданный объект
thread является joinable. После вызова join
или detach поток становится не joinable. Также
не joinable является поток по умолчанию сконструированный
или перемещенный.
Синтаксис
thread.joinable()
Пример
Давайте создадим поток и проверим его состояние
до и после вызова join:
#include <iostream>
#include <thread>
using namespace std;
void func()
{
cout << "Thread is running" << endl;
}
int main()
{
thread t(func);
cout << "Before join: " << t.joinable() << endl;
t.join();
cout << "After join: " << t.joinable() << endl;
return 0;
}
Результат выполнения кода:
"Before join: 1"
"Thread is running"
"After join: 0"
Пример
Давайте проверим состояние потока по умолчанию
и после вызова detach:
#include <iostream>
#include <thread>
using namespace std;
void func()
{
cout << "Detached thread" << endl;
}
int main()
{
thread t1;
cout << "Default thread: " << t1.joinable() << endl;
thread t2(func);
cout << "Before detach: " << t2.joinable() << endl;
t2.detach();
cout << "After detach: " << t2.joinable() << endl;
return 0;
}
Результат выполнения кода:
"Default thread: 0"
"Before detach: 1"
"After detach: 0"
"Detached thread"