structured_task_group 클래스
structured_task_group
클래스는 구조화된 병렬 작업 컬렉션을 나타냅니다. task_handle
개체를 사용하여 개별 병렬 작업을 structured_task_group
에 대기시킨 다음 완료되기를 기다리거나 실행이 완료되기 전에 작업 그룹을 취소합니다. 이 경우 실행이 시작되지 않은 작업이 모두 중단됩니다.
구문
class structured_task_group;
멤버
공용 생성자
속성 | 설명 |
---|---|
structured_task_group | 오버로드됨. 새 structured_task_group 개체를 생성합니다. |
~structured_task_group 소멸자 | structured_task_group 개체를 제거합니다. 소멸자가 예외로 인해 스택 해제의 결과로 실행되지 않는 한 소멸자가 실행되기 전에 개체의 메서드 또는 run_and_wait 메서드를 호출 wait 해야 합니다. |
공용 메서드
이름 | 설명 |
---|---|
cancel | 이 작업 그룹에 루팅된 작업의 하위 트리를 취소하기 위해 최선을 다합니다. 작업 그룹에 예약된 모든 작업은 가능하면 전이적으로 취소됩니다. |
is_canceling | 작업 그룹이 현재 취소 중인지 여부를 호출자에게 알릴 수 있습니다. 이 메서드가 개체에서 structured_task_group 호출되었음을 반드시 나타내는 cancel 것은 아닙니다(이 메서드가 반환true 할 수 있는 자격은 확실히 있지만). 개체가 인라인으로 structured_task_group 실행되고 작업 트리의 작업 그룹이 취소된 경우일 수 있습니다. 이러한 경우 런타임에서 취소가 이 structured_task_group 개체 true 를 통해 흐르는 것을 미리 결정할 수 있는 경우도 반환됩니다. |
run | 오버로드됨. 개체에 대한 작업을 예약합니다 structured_task_group . 호출자는 매개 변수에 전달된 _Task_handle 개체의 수 task_handle 명을 관리합니다. _Placement 매개 변수를 사용하는 버전은 이 매개 변수로 지정된 위치에서 작업이 실행되도록 합니다. |
run_and_wait | 오버로드됨. 전체 취소 지원을 위해 개체의 structured_task_group 도움을 받아 호출 컨텍스트에서 인라인으로 실행되도록 작업을 예약합니다. 개체가 task_handle 매개 변수 run_and_wait 로 전달되는 경우 호출자는 개체의 task_handle 수명을 관리해야 합니다. 그런 다음, 함수는 개체의 structured_task_group 모든 작업이 완료되거나 취소될 때까지 기다립니다. |
wait | 모든 작업이 structured_task_group 완료되거나 취소될 때까지 기다립니다. |
설명
성능을 얻기 위해 개체를 사용할 structured_task_group
때는 다음과 같은 여러 가지 심각한 제한 사항이 있습니다.
단일
structured_task_group
개체는 여러 스레드에서 사용할 수 없습니다. 개체에 대한 모든 작업은 개체를structured_task_group
만든 스레드에서 수행해야 합니다. 이 규칙의 두 가지 예외는 멤버 함수 및is_canceling
.cancel
작업이 취소 작업 중 하나를 사용하지 않는 한 개체는 람다 식의 캡처 목록에 없을 수 있으며 작업 내에서 사용할 수 있습니다.개체로
structured_task_group
예약된 모든 작업은 수명을 명시적으로 관리해야 하는 개체를task_handle
사용하여 예약됩니다.여러 그룹은 절대적으로 중첩된 순서로만 사용할 수 있습니다. 두
structured_task_group
개체가 선언된 경우 선언되는 두 번째 개체(내부 개체)는 첫 번째 메서드(외부 개체)를 제외한cancel
is_canceling
모든 메서드 앞에 소멸되어야 합니다. 이 조건은 동일하거나 기능적으로 중첩된 범위 내에서 단순히 여러structured_task_group
개체를 선언하는 경우와 또는run_and_wait
메서드를 통해run
큐에structured_task_group
대기된 작업의 경우 모두에 적용됩니다.일반
task_group
클래스와 달리 클래스의structured_task_group
모든 상태는 최종 상태입니다. 그룹에 작업을 큐 대기하고 완료되기를 기다린 후에 다시 같은 그룹을 사용할 수 없습니다.
자세한 내용은 작업 병렬 처리를 참조하세요.
상속 계층 구조
structured_task_group
요구 사항
헤더: ppl.h
네임스페이스: 동시성
취소
이 작업 그룹에 루팅된 작업의 하위 트리를 취소하기 위해 최선을 다합니다. 작업 그룹에 예약된 모든 작업은 가능하면 전이적으로 취소됩니다.
void cancel();
설명
is_canceling
작업 그룹이 현재 취소 중인지 여부를 호출자에게 알릴 수 있습니다. 이 메서드가 개체에서 structured_task_group
호출되었음을 반드시 나타내는 cancel
것은 아닙니다(이 메서드가 반환true
할 수 있는 자격은 확실히 있지만). 개체가 인라인으로 structured_task_group
실행되고 작업 트리의 작업 그룹이 취소된 경우일 수 있습니다. 이러한 경우 런타임에서 취소가 이 structured_task_group
개체 true
를 통해 흐르는 것을 미리 결정할 수 있는 경우도 반환됩니다.
bool is_canceling();
Return Value
개체가 structured_task_group
취소 중인지 또는 곧 보장되는지 여부를 나타냅니다.
설명
run
개체에 대한 작업을 예약합니다 structured_task_group
. 호출자는 매개 변수에 전달된 _Task_handle
개체의 수 task_handle
명을 관리합니다. _Placement
매개 변수를 사용하는 버전은 이 매개 변수로 지정된 위치에서 작업이 실행되도록 합니다.
template<class _Function>
void run(
task_handle<_Function>& _Task_handle);
template<class _Function>
void run(
task_handle<_Function>& _Task_handle,
location& _Placement);
매개 변수
_기능
작업 핸들의 본문을 실행하기 위해 호출될 함수 개체의 형식입니다.
_Task_handle
예약 중인 작업에 대한 핸들입니다. 호출자는 이 개체의 수명에 대한 책임이 있습니다. 런타임은 이 structured_task_group
개체에 대해 또는 run_and_wait
메서드가 wait
호출될 때까지 계속 실행될 것으로 예상합니다.
_배치
_Task_handle
매개 변수가 나타내는 작업을 실행해야 할 위치에 대한 참조입니다.
설명
런타임은 이 메서드에 전달하는 작업 함수의 복사본을 만듭니다. 이 메서드에 전달하는 함수 개체에서 발생하는 상태 변경 내용은 해당 함수 개체의 복사본에 표시되지 않습니다.
예외에서 structured_task_group
스택 해제의 결과로 소멸되는 경우 또는 메서드에 대한 호출이 수행 wait
run_and_wait
되었음을 보장할 필요가 없습니다. 이 경우 소멸자는 적절하게 취소하고 매개 변수가 _Task_handle
나타내는 작업이 완료될 때까지 기다립니다.
매개 변수에서 지정한 _Task_handle
작업 핸들이 메서드를 통해 run
작업 그룹 개체에 이미 예약되어 있고 해당 작업 그룹에 대한 중간 호출 wait
이나 run_and_wait
메서드가 없는 경우 invalid_multiple_scheduling 예외를 throw합니다.
run_and_wait
전체 취소 지원을 위해 개체의 structured_task_group
도움을 받아 호출 컨텍스트에서 인라인으로 실행되도록 작업을 예약합니다. 개체가 task_handle
매개 변수 run_and_wait
로 전달되는 경우 호출자는 개체의 task_handle
수명을 관리해야 합니다. 그런 다음, 함수는 개체의 structured_task_group
모든 작업이 완료되거나 취소될 때까지 기다립니다.
template<class _Function>
task_group_status run_and_wait(task_handle<_Function>& _Task_handle);
template<class _Function>
task_group_status run_and_wait(const _Function& _Func);
매개 변수
_기능
작업을 실행하기 위해 호출될 함수 개체의 형식입니다.
_Task_handle
호출 컨텍스트에서 인라인으로 실행될 작업에 대한 핸들입니다. 호출자는 이 개체의 수명에 대한 책임이 있습니다. 런타임은 메서드 실행이 완료될 때까지 run_and_wait
계속 실행될 것으로 예상합니다.
_Func
작업의 본문을 호출하기 위해 호출되는 함수입니다. 서명이 있는 함수 호출 연산 void operator()()
자의 버전을 지원하는 람다 또는 다른 개체일 수 있습니다.
Return Value
명시적 취소 작업 또는 해당 작업 중 하나에서 예외가 throw되어 대기가 충족되었는지 또는 작업 그룹이 취소되었는지 여부를 나타냅니다. 자세한 내용은 task_group_status 참조 하세요.
설명
이 structured_task_group
개체로 예약된 작업 중 하나 이상이 호출 컨텍스트에서 인라인으로 실행될 수 있습니다.
이 structured_task_group
개체로 예약된 작업 중 하나 이상이 예외를 throw하는 경우 런타임은 이러한 예외 중 하나를 선택하여 메서드 호출 run_and_wait
에서 전파합니다.
이 함수가 반환된 후 structured_task_group
개체는 최종 상태로 간주되므로 사용할 수 없습니다. 메서드가 반환된 후의 run_and_wait
사용률로 인해 정의되지 않은 동작이 발생합니다.
예외가 아닌 실행 경로에서는 이 메서드 또는 메서드를 호출한 후 wait
소멸자가 structured_task_group
실행되기 전에 호출해야 합니다.
structured_task_group
새 structured_task_group
개체를 생성합니다.
structured_task_group();
structured_task_group(cancellation_token _CancellationToken);
매개 변수
_CancellationToken
이 구조화된 작업 그룹과 연결할 취소 토큰입니다. 토큰이 취소되면 구조화된 작업 그룹이 취소됩니다.
설명
취소 토큰을 사용하는 생성자는 토큰에 연결된 소스가 취소될 때 취소될 structured_task_group
을 만듭니다. 명시적 취소 토큰을 제공하면 이 구조화된 작업 그룹이 다른 토큰 또는 토큰이 없는 부모 그룹에서 암시적 취소에 참여하지 않도록 격리됩니다.
~structured_task_group
structured_task_group
개체를 제거합니다. 소멸자가 예외로 인해 스택 해제의 결과로 실행되지 않는 한 소멸자가 실행되기 전에 개체의 메서드 또는 run_and_wait
메서드를 호출 wait
해야 합니다.
~structured_task_group();
설명
소멸자가 정상적인 실행의 결과로 실행되고(예: 예외로 인해 스택 해제가 아님) 및 메서드가 run_and_wait
호출되지 않은 wait
경우 소멸자는 missing_wait 예외를 throw할 수 있습니다.
wait
모든 작업이 structured_task_group
완료되거나 취소될 때까지 기다립니다.
task_group_status wait();
Return Value
명시적 취소 작업 또는 해당 작업 중 하나에서 예외가 throw되어 대기가 충족되었는지 또는 작업 그룹이 취소되었는지 여부를 나타냅니다. 자세한 내용은 task_group_status 참조 하세요.
설명
이 structured_task_group
개체로 예약된 작업 중 하나 이상이 호출 컨텍스트에서 인라인으로 실행될 수 있습니다.
이 structured_task_group
개체로 예약된 작업 중 하나 이상이 예외를 throw하는 경우 런타임은 이러한 예외 중 하나를 선택하여 메서드 호출 wait
에서 전파합니다.
이 함수가 반환된 후 structured_task_group
개체는 최종 상태로 간주되므로 사용할 수 없습니다. 메서드가 반환된 후의 wait
사용률로 인해 정의되지 않은 동작이 발생합니다.
예외가 아닌 실행 경로에서는 이 메서드 또는 메서드를 호출한 후 run_and_wait
소멸자가 structured_task_group
실행되기 전에 호출해야 합니다.