Spec-Zone.ru › C++

std::jthread

Определено в заголовке <thread>
class jthread;
(с C++20)

Класс jthread представляет отдельный поток выполнения. Он имеет такое же общее поведение, как и std::thread, за исключением того, что jthread автоматически присоединяется при уничтожении и может быть отменён/остановлен в определённых ситуациях.

Потоки начинают выполнение немедленно после создания объекта потока (с учётом возможных задержек планирования ОС), начиная с функции верхнего уровня, предоставленной в качестве аргумента конструктора. Возвращаемое значение функции верхнего уровня игнорируется, а если оно завершается сбросом исключения, вызывается std::terminate. Функция верхнего уровня может передать своё возвращаемое значение или исключение вызывающей стороне через std::promise или путём изменения общих переменных (что может потребовать синхронизации, см. std::mutex и std::atomic).

В отличие от std::thread, jthread логически содержит внутренний закрытый член типа std::stop_source, который поддерживает общее состояние остановки. Конструктор jthread принимает функцию, которая в качестве первого аргумента принимает std::stop_token, который передаётся jthread из её внутреннего std::stop_source. Это позволяет функции проверять, было ли запрошено приостановление во время выполнения, и возвращаться, если это так.

Объекты std::jthread также могут находиться в состоянии, которое не представляет ни одного потока (после создания по умолчанию, перемещения, detach, или join), и поток выполнения может не быть связан ни с одним объектом jthread (после detach).

Два объекта std::jthread не могут представлять один и тот же поток выполнения; std::jthread не является CopyConstructible или CopyAssignable, хотя он является MoveConstructible и MoveAssignable.

Типы членов

Тип члена Определение
id std::thread::id
native_handle_type(не всегда присутствует) std::thread::native_handle_type

Члены-функции

(конструктор)
создаёт новый объект jthread
(общедоступная функция-член)
(деструктор)
если поток присоединяемый, запрос остановки и присоединение потока
(общедоступная функция-член)
operator=
перемещает объект jthread
(общедоступная функция-член)
Наблюдатели
joinable
проверяет, может ли поток быть присоединён, т.е. потенциально выполняется в контексте параллелизма
(общедоступная функция-член)
get_id
возвращает идентификатор потока
(общедоступная функция-член)
native_handle
возвращает определяемую реализацией внутреннюю дескриптор потока
(общедоступная функция-член)
hardware_concurrency
[статический]
возвращает количество поддерживаемых реализацией одновременных потоков
(общедоступная статическая функция-член)
Операции
join
ожидает завершения выполнения потока
(общедоступная функция-член)
detach
разрешает потоку выполняться независимо от идентификатора потока
(общедоступная функция-член)
swap
меняет два объекта jthread
(общедоступная функция-член)
Обработка маркеров остановки
get_stop_source
возвращает объект stop_source , связанный с общим состоянием остановки потока
(общедоступная функция-член)
get_stop_token
возвращает stop_token , связанный с общим состоянием остановки потока
(общедоступная функция-член)
request_stop
запрашивает остановку выполнения через общее состояние остановки потока
(общедоступная функция-член)

Функции, не являющиеся членами

swap(std::jthread)
(C++20)
специализирует алгоритм std::swap
(функция)

Примечания

Макрос проверки наличия функции Значение Стандарт Функция
__cpp_lib_jthread 201911L (C++20) Маркер остановки и присоединение потока

См. также

thread
(C++11)
управляет отдельным потоком
(класс)

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

Spec-Zone.ru

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