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 функция-элемент) | |
[static] |
возвращает количество параллельных потоков, поддерживаемых реализацией (public static функция-элемент) |
Операции | |
ждёт, пока поток закончит свое выполнение (public функция-элемент) | |
позволяет потоку выполняться независимо от дескриптора потока (public функция-элемент) | |
обменивает два объекта jthread (public функция-элемент) | |
Обработка стоповых токенов | |
возвращает объект stop_source, связанный с общим состоянием остановки потока (public функция-элемент) | |
возвращает stop_token, связанный с общим состоянием остановки потока (public функция-элемент) | |
запрашивает остановку выполнения через общее состояние остановки потока (public функция-элемент) |
[править] Функции, не являющиеся элементами
(C++20) |
специализация алгоритма std::swap (функция) |
[править] Примечание
Макрос Тестирования функциональности | Значение | Стандарт | Функциональность |
---|---|---|---|
__cpp_lib_jthread |
201911L | (C++20) | Стоповый токен и присоединение к потоку |
[править] Смотрите также
(C++11) |
управляет отдельным потоком (класс) |