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
[static]
возвращает количество одновременно выполняемых потоков, поддерживаемое реализацией
(открытая статическая функция-член)
Операции
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/cpp/thread/jthread

Spec-Zone.ru

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