Spec-Zone.ru › C++

std::jthread::joinable

bool joinable() const noexcept;
(начиная с C++20)

Проверяет, идентифицирует ли объект std::jthread активный поток выполнения. В частности, возвращает true, если get_id() != std::jthread::id(). Поэтому объект jthread, созданный конструктором по умолчанию, не является присоединяемым.

Поток, завершивший выполнение кода, но ещё не присоединённый, по-прежнему считается активным потоком выполнения и, следовательно, является присоединяемым.

Параметры

(нет)

Возвращаемое значение

true, если объект std::jthread идентифицирует активный поток выполнения, и false в противном случае.

Пример

#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::jthread t;
    std::cout << "before starting, joinable: " << t.joinable() << '\n';

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

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

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

Вывод:

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

Ссылки

  • Стандарт C++23 (ISO/IEC 14882:2024):
    • 33.4.4.3 Члены [thread.jthread.mem]
  • Стандарт C++20 (ISO/IEC 14882:2020):
    • 32.4.3.2 Члены [thread.jthread.mem]

См. также

get_id
возвращает идентификатор потока
(открытая функция-член)
join
ожидает завершения потока
(открытая функция-член)
detach
позволяет потоку выполняться независимо от дескриптора потока
(открытая функция-член)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/thread/jthread/joinable

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API