Пространства имён
Варианты
Действия

std::jthread

Материал из cppreference.com
< cpp‎ | thread
 
 
Библиотека поддержки конкуренции
Ветви
(C++11)
jthread
(C++20)
(C++20)
Пространство имён this_thread
(C++11)
(C++11)
(C++11)
Атомарные типы
(C++11)
(C++20)
Инициализация атомарных типов
(C++11)(устарело в C++20)
(C++11)(устарело в C++20)
(C++11)(устарело в C++20)
Функции освобождения для атомарных операций
Функции освобождения для атомарных флагов
Упорядочивание памяти
Взаимное исключение
(C++11)
Общее управление блокировкой
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
Условные переменные
(C++11)
Семафоры
Защёлки и барьеры
(C++20)
(C++20)
Фьючерсы
(C++11)
(C++11)
(C++11)
(C++11)
 
std::jthread
Функции-элементы
Наблюдатели
Операции
Обработка Стоп Токен
Функции, не являющиеся элементами
 
Определено в заголовочном файле <thread>
class jthread;
(начиная с C++20)

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

Потоки начинают выполняться сразу после создания связанного объекта потока (в ожидании любых задержек планирования ОС), начиная с функции верхнего уровня, предоставленной в виде аргумента конструктора. Возвращаемое значение функции верхнего уровня игнорируется, и если она завершается выдачей исключения, вызывается std::terminate. Функция верхнего уровня может передать вызывающей стороне возвращаемое значение или исключение через std::promise или путём изменения общих переменных (для чего может потребоваться синхронизация, смотрите std::mutex and 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 функция-элемент) [править]
если поток доступен для присоединения, то запрашивается остановка, и поток присоединяется
(public функция-элемент) [править]
перемещает объект jthread
(public функция-элемент) [править]
Наблюдатели
проверяет, является ли поток присоединяемым, т.е. потенциально работающим в параллельном контексте
(public функция-элемент) [править]
возвращает идентификатор потока
(public функция-элемент) [править]
возвращает базовый дескриптор потока, определяемый реализацией
(public функция-элемент) [править]
возвращает количество параллельных потоков, поддерживаемых реализацией
(public static функция-элемент) [править]
Операции
ждёт, пока поток закончит свое выполнение
(public функция-элемент) [править]
позволяет потоку выполняться независимо от дескриптора потока
(public функция-элемент) [править]
обменивает два объекта jthread
(public функция-элемент) [править]
Обработка стоповых токенов
возвращает объект stop_source, связанный с общим состоянием остановки потока
(public функция-элемент) [править]
возвращает stop_token, связанный с общим состоянием остановки потока
(public функция-элемент) [править]
запрашивает остановку выполнения через общее состояние остановки потока
(public функция-элемент) [править]

[править] Функции, не являющиеся элементами

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

[править] Примечание

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

[править] Смотрите также

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