다음을 통해 공유


task_group 클래스

task_group 클래스는 대기하거나 취소할 수 있는 병렬 작업 컬렉션을 나타냅니다.

구문

class task_group;

멤버

공용 생성자

속성 설명
task_group 오버로드됨. 새 task_group 개체를 생성합니다.
~task_group 소멸자 task_group 개체를 제거합니다. 소멸자가 예외로 인해 스택 해제의 결과로 실행되지 않는 한 소멸자가 실행되기 전에 개체의 메서드 또는 run_and_wait 메서드를 호출 wait 해야 합니다.

공용 메서드

이름 설명
cancel 이 작업 그룹에 루팅된 작업의 하위 트리를 취소하기 위해 최선을 다합니다. 작업 그룹에 예약된 모든 작업은 가능하면 전이적으로 취소됩니다.
is_canceling 작업 그룹이 현재 취소 중인지 여부를 호출자에게 알릴 수 있습니다. 이 메서드가 개체에서 task_group 호출되었음을 반드시 나타내는 cancel 것은 아닙니다(이 메서드가 반환true할 수 있는 자격은 확실히 있지만). 개체가 인라인으로 task_group 실행되고 작업 트리의 작업 그룹이 취소된 경우일 수 있습니다. 이러한 경우 런타임에서 취소가 이 task_group 개체 true 를 통해 흐르는 것을 미리 결정할 수 있는 경우도 반환됩니다.
run 오버로드됨. 개체에 대한 작업을 예약합니다 task_group . 개체가 task_handle 매개 변수 run로 전달되는 경우 호출자는 개체의 task_handle 수명을 관리해야 합니다. 함수 개체를 매개 변수로 참조하는 메서드 버전은 런타임 내에서 힙 할당을 포함하며, 이는 개체에 대한 참조 task_handle 를 사용하는 버전을 사용하는 것보다 성능이 떨어질 수 있습니다. _Placement 매개 변수를 사용하는 버전은 이 매개 변수로 지정된 위치에서 작업이 실행되도록 합니다.
run_and_wait 오버로드됨. 전체 취소 지원을 위해 개체의 task_group 도움을 받아 호출 컨텍스트에서 인라인으로 실행되도록 작업을 예약합니다. 그런 다음, 함수는 개체의 task_group 모든 작업이 완료되거나 취소될 때까지 기다립니다. 개체가 task_handle 매개 변수 run_and_wait로 전달되는 경우 호출자는 개체의 task_handle 수명을 관리해야 합니다.
wait 개체의 task_group 모든 작업이 완료되거나 취소될 때까지 기다립니다.

설명

매우 제한된 structured_task_group 클래스와 달리 클래스는 task_group 훨씬 더 일반적인 구문입니다. structured_task_group 설명된 제한 사항이 없습니다. task_group 개체를 스레드 간에 안전하게 사용하고 자유 형식 방식으로 활용할 수 있습니다. 구문의 task_group 단점은 적은 양의 작업을 수행하는 작업에 대한 구문뿐만 structured_task_group 아니라 수행되지 않을 수 있다는 것입니다.

자세한 내용은 작업 병렬 처리를 참조하세요.

상속 계층 구조

task_group

요구 사항

헤더: ppl.h

네임스페이스: 동시성

cancel

이 작업 그룹에 루팅된 작업의 하위 트리를 취소하기 위해 최선을 다합니다. 작업 그룹에 예약된 모든 작업은 가능하면 전이적으로 취소됩니다.

void cancel();

설명

자세한 내용은 취소를 참조하세요.

is_canceling

작업 그룹이 현재 취소 중인지 여부를 호출자에게 알릴 수 있습니다. 이 메서드가 개체에서 task_group 호출되었음을 반드시 나타내는 cancel 것은 아닙니다(이 메서드가 반환true할 수 있는 자격은 확실히 있지만). 개체가 인라인으로 task_group 실행되고 작업 트리의 작업 그룹이 취소된 경우일 수 있습니다. 이러한 경우 런타임에서 취소가 이 task_group 개체 true 를 통해 흐르는 것을 미리 결정할 수 있는 경우도 반환됩니다.

bool is_canceling();

Return Value

개체가 task_group 취소 중인지 또는 곧 보장되는지 여부를 나타냅니다.

설명

자세한 내용은 취소를 참조하세요.

실행

개체에 대한 작업을 예약합니다 task_group . 개체가 task_handle 매개 변수 run로 전달되는 경우 호출자는 개체의 task_handle 수명을 관리해야 합니다. 함수 개체를 매개 변수로 참조하는 메서드 버전은 런타임 내에서 힙 할당을 포함하며, 이는 개체에 대한 참조 task_handle 를 사용하는 버전을 사용하는 것보다 성능이 떨어질 수 있습니다. _Placement 매개 변수를 사용하는 버전은 이 매개 변수로 지정된 위치에서 작업이 실행되도록 합니다.

template<
   typename _Function
>
void run(
   const _Function& _Func
);

template<
   typename _Function
>
void run(
   const _Function& _Func,
   location& _Placement
);

template<
   typename _Function
>
void run(
   task_handle<_Function>& _Task_handle
);

template<
   typename _Function
>
void run(
   task_handle<_Function>& _Task_handle,
   location& _Placement
);

매개 변수

_기능
작업 핸들의 본문을 실행하기 위해 호출될 함수 개체의 형식입니다.

_Func
작업의 본문을 호출하기 위해 호출되는 함수입니다. 서명이 있는 함수 호출 연산 void operator()()자의 버전을 지원하는 람다 식 또는 다른 개체일 수 있습니다.

_배치
_Func 매개 변수가 나타내는 작업을 실행해야 할 위치에 대한 참조입니다.

_Task_handle
예약 중인 작업에 대한 핸들입니다. 호출자는 이 개체의 수명에 대한 책임이 있습니다. 런타임은 이 task_group 개체에 대해 또는 run_and_wait 메서드가 wait 호출될 때까지 계속 실행될 것으로 예상합니다.

설명

런타임은 제공된 작업 함수가 나중에 실행되도록 예약합니다. 이는 호출 함수가 반환된 후일 수 있습니다. 이 메서드는 task_handle 개체를 사용하여 제공된 작업 함수의 복사본을 저장합니다. 따라서 이 메서드에 전달하는 함수 개체에서 발생하는 상태 변경 내용은 해당 함수 개체의 복사본에 표시되지 않습니다. 또한 작업 함수가 반환될 때까지 포인터 또는 작업 함수에 대한 참조로 전달하는 개체의 수명이 유효한지 확인합니다.

예외에서 task_group 스택 해제의 결과로 소멸되는 경우 또는 메서드에 대한 호출이 수행 wait run_and_wait 되었음을 보장할 필요가 없습니다. 이 경우 소멸자는 적절하게 취소하고 매개 변수가 _Task_handle 나타내는 작업이 완료될 때까지 기다립니다.

매개 변수에서 지정한 _Task_handle 작업 핸들이 메서드를 통해 run 작업 그룹 개체에 이미 예약되어 있고 해당 작업 그룹에 대한 중간 호출 waitrun_and_wait 없는 경우 메서드는 invalid_multiple_scheduling 예외를 throw합니다.

run_and_wait

전체 취소 지원을 위해 개체의 task_group 도움을 받아 호출 컨텍스트에서 인라인으로 실행되도록 작업을 예약합니다. 그런 다음, 함수는 개체의 task_group 모든 작업이 완료되거나 취소될 때까지 기다립니다. 개체가 task_handle 매개 변수 run_and_wait로 전달되는 경우 호출자는 개체의 task_handle 수명을 관리해야 합니다.

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 참조하세요.

설명

task_group 개체로 예약된 작업 중 하나 이상이 호출 컨텍스트에서 인라인으로 실행될 수 있습니다.

task_group 개체로 예약된 작업 중 하나 이상이 예외를 throw하는 경우 런타임은 이러한 예외 중 하나를 선택하여 메서드 호출 run_and_wait 에서 전파합니다.

개체의 run_and_wait 메서드 task_group 에서 돌아오면 런타임은 개체를 다시 사용할 수 있는 깨끗한 상태로 다시 설정합니다. 여기에는 개체가 task_group 취소된 경우가 포함됩니다.

예외가 아닌 실행 경로에서는 이 메서드 또는 메서드를 호출한 후 wait 소멸자가 task_group 실행되기 전에 호출해야 합니다.

task_group

task_group 개체를 생성합니다.

task_group();

task_group(
   cancellation_token _CancellationToken
);

매개 변수

_CancellationToken
이 작업 그룹에 연결할 취소 토큰입니다. 작업 그룹은 토큰이 취소될 때 취소됩니다.

설명

취소 토큰을 사용하는 생성자는 토큰에 연결된 소스가 취소될 때 취소될 task_group을 만듭니다. 명시적 취소 토큰을 제공하면 다른 토큰을 사용하거나 토큰을 사용하지 않는 부모 그룹에서의 암시적 취소에 이 작업 그룹이 참여하지 않도록 격리됩니다.

~task_group

task_group 개체를 제거합니다. 소멸자가 예외로 인해 스택 해제의 결과로 실행되지 않는 한 소멸자가 실행되기 전에 개체의 메서드 또는 run_and_wait 메서드를 호출 wait 해야 합니다.

~task_group();

설명

소멸자가 정상적인 실행의 결과로 실행되고(예: 예외로 인해 스택 해제가 아님) 및 메서드가 run_and_wait 호출되지 않은 wait 경우 소멸자는 missing_wait 예외를 throw할 수 있습니다.

wait

개체의 task_group 모든 작업이 완료되거나 취소될 때까지 기다립니다.

task_group_status wait();

Return Value

명시적 취소 작업 또는 해당 작업 중 하나에서 예외가 throw되어 대기가 충족되었는지 또는 작업 그룹이 취소되었는지 여부를 나타냅니다. 자세한 내용은 task_group_status 참조하세요.

설명

task_group 개체로 예약된 작업 중 하나 이상이 호출 컨텍스트에서 인라인으로 실행될 수 있습니다.

task_group 개체로 예약된 작업 중 하나 이상이 예외를 throw하는 경우 런타임은 이러한 예외 중 하나를 선택하여 메서드 호출 wait 에서 전파합니다.

개체를 task_group 호출 wait 하면 다시 사용할 수 있는 깨끗한 상태로 다시 설정됩니다. 여기에는 개체가 task_group 취소된 경우가 포함됩니다.

예외가 아닌 실행 경로에서는 이 메서드 또는 메서드를 호출한 후 run_and_wait 소멸자가 task_group 실행되기 전에 호출해야 합니다.

참고 항목

concurrency 네임스페이스
structured_task_group 클래스
task_handle 클래스