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
(public member function) |
|
|
если поток присоединяемый, то запрашивается остановка и поток присоединяется
(public member function) |
|
перемещает объект
jthread
(public member function) |
|
Наблюдатели |
|
|
проверяет, является ли поток присоединяемым, т.е. потенциально выполняющимся в параллельном контексте
(public member function) |
|
|
возвращает
id
потока
(public member function) |
|
|
возвращает базовый дескриптор потока, определяемый реализацией
(public member function) |
|
|
[static]
|
возвращает количество параллельных потоков, поддерживаемых реализацией
(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) |
|
Функции, не являющиеся членами класса
|
(C++20)
|
специализирует алгоритм
std::swap
(функция) |
Примечания
| Макрос тестирования возможностей | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_jthread
|
201911L
|
(C++20) | Stop token и joining thread |
Смотрите также
|
(C++11)
|
управляет отдельным потоком выполнения
(класс) |