Namespaces
Variants

std:: jthread

From cppreference.net
Concurrency support library
Threads
(C++11)
jthread
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
Определено в заголовочном файле <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
(public member function)
если поток присоединяемый, то запрашивается остановка и поток присоединяется
(public member function)
перемещает объект jthread
(public member function)
Наблюдатели
проверяет, является ли поток присоединяемым, т.е. потенциально выполняющимся в параллельном контексте
(public member function)
возвращает id потока
(public member function)
возвращает базовый дескриптор потока, определяемый реализацией
(public member function)
возвращает количество параллельных потоков, поддерживаемых реализацией
(public static member function)
Операции
ожидает завершения выполнения потока
(public member function)
позволяет потоку выполняться независимо от дескриптора потока
(public member function)
обменивает два объекта jthread
(public member function)
Обработка стоп-токенов
возвращает объект stop_source , связанный с общим состоянием остановки потока
(public member function)
возвращает stop_token , связанный с общим состоянием остановки потока
(public member function)
запрашивает остановку выполнения через общее состояние остановки потока
(public member function)

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

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

Примечания

Макрос тестирования возможностей Значение Стандарт Возможность
__cpp_lib_jthread 201911L (C++20) Stop token и joining thread

Смотрите также

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