Spec-Zone.ru › C++

std::jthread::joinable

[[nodiscard]] bool joinable() const noexcept;
(since C++20)

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

Нить, которая завершила выполнение кода, но ещё не была присоединена, всё ещё считается активной нитью выполнения и, следовательно, присоединяемой.

Параметры

(нет)

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

true если объект 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:2023):
    • 33.4.4.3 Члены [thread.jthread.mem]
  • Стандарт C++20 (ISO/IEC 14882:2020):
    • 32.4.3.2 Члены [thread.jthread.mem]

См. также

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

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

Spec-Zone.ru

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