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) |
управляет отдельным потоком (класс) |

