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 (общедоступная функция-член) |
|
| если поток присоединяемый, запрос остановки и присоединение потока (общедоступная функция-член) |
|
перемещает объект jthread (общедоступная функция-член) |
|
Наблюдатели |
|
| проверяет, может ли поток быть присоединён, т.е. потенциально выполняется в контексте параллелизма (общедоступная функция-член) |
|
| возвращает идентификатор потока (общедоступная функция-член) |
|
| возвращает определяемую реализацией внутреннюю дескриптор потока (общедоступная функция-член) |
|
|
[статический] | возвращает количество поддерживаемых реализацией одновременных потоков (общедоступная статическая функция-член) |
Операции |
|
| ожидает завершения выполнения потока (общедоступная функция-член) |
|
| разрешает потоку выполняться независимо от идентификатора потока (общедоступная функция-член) |
|
| меняет два объекта jthread (общедоступная функция-член) |
|
Обработка маркеров остановки |
|
возвращает объект stop_source , связанный с общим состоянием остановки потока (общедоступная функция-член) |
|
возвращает stop_token , связанный с общим состоянием остановки потока (общедоступная функция-член) |
|
| запрашивает остановку выполнения через общее состояние остановки потока (общедоступная функция-член) |
|
Функции, не являющиеся членами
|
(C++20) | специализирует алгоритм std::swap (функция) |
Примечания
| Макрос проверки наличия функции | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_jthread | 201911L | (C++20) | Маркер остановки и присоединение потока |
См. также
|
(C++11) | управляет отдельным потоком (класс) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/thread/jthread