다음을 통해 공유


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 개체가 선언된 경우 선언되는 두 번째 개체(내부 개체)는 첫 번째 메서드(외부 개체)를 제외한 cancelis_canceling 모든 메서드 앞에 소멸되어야 합니다. 이 조건은 동일하거나 기능적으로 중첩된 범위 내에서 단순히 여러 structured_task_group 개체를 선언하는 경우와 또는 run_and_wait 메서드를 통해 run 큐에 structured_task_group 대기된 작업의 경우 모두에 적용됩니다.

  • 일반 task_group 클래스와 달리 클래스의 structured_task_group 모든 상태는 최종 상태입니다. 그룹에 작업을 큐 대기하고 완료되기를 기다린 후에 다시 같은 그룹을 사용할 수 없습니다.

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

상속 계층 구조

structured_task_group

요구 사항

헤더: ppl.h

네임스페이스: 동시성

cancel

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

void cancel();

설명

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

is_canceling

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

bool is_canceling();

Return Value

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

설명

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

실행

개체에 대한 작업을 예약합니다 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 스택 해제의 결과로 소멸되는 경우 또는 메서드에 대한 호출이 수행 waitrun_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_상태 참조하세요.

설명

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

설명

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

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

이 함수가 반환된 후 structured_task_group 개체는 최종 상태로 간주되므로 사용할 수 없습니다. 메서드가 반환된 후의 wait 사용률로 인해 정의되지 않은 동작이 발생합니다.

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

참고 항목

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