Funkcje przestrzeni nazw współbieżności

Alloc

Przydziela blok pamięci o rozmiarze określonym z Buforowanie podrzędnego przydziału środowiska uruchomieniowego współbieżności.

void* __cdecl Alloc(size_t _NumBytes);

Parametry

_NumBytes
Liczba bajtów pamięci do przydzielenia.

Wartość zwracana

Wskaźnik do nowo przydzielonej pamięci.

Uwagi

Aby uzyskać więcej informacji na temat scenariuszy w aplikacji, które mogą korzystać z narzędzia Buforowanie Suballocator, zobacz Harmonogram zadań.

Asend

Asynchroniczna operacja wysyłania, która planuje zadanie propagacji danych do bloku docelowego.

template <class T>
bool asend(
    _Inout_ ITarget<T>* _Trg,
    const T& _Data);

template <class T>
bool asend(
    ITarget<T>& _Trg,
    const T& _Data);

Parametry

T
Typ danych do wysłania.

_Trg
Wskaźnik lub odwołanie do miejsca docelowego, do którego są wysyłane dane.

_Danych
Odwołanie do danych do wysłania.

Wartość zwracana

true jeśli komunikat został zaakceptowany przed zwróceniem metody, false w przeciwnym razie.

Uwagi

Aby uzyskać więcej informacji, zobacz Funkcje przekazywania komunikatów.

cancel_current_task

Anuluje aktualnie wykonywane zadanie. Tę funkcję można wywołać z poziomu treści zadania, aby przerwać wykonywanie zadania i spowodować jego wejście do canceled stanu.

Nie jest obsługiwanym scenariuszem wywoływania tej funkcji, jeśli nie znajdujesz się w treści elementu task. Spowoduje to niezdefiniowane zachowanie, takie jak awaria lub brak odpowiedzi w aplikacji.

inline __declspec(noreturn) void __cdecl cancel_current_task();

Wyczyść

Czyści równoczesną kolejkę, niszcząc wszystkie aktualnie w kolejce elementy. Ta metoda nie jest bezpieczna współbieżności.

template<typename T, class _Ax>
void concurrent_queue<T, _Ax>::clear();

Parametry

T

_Ax

create_async

Tworzy konstrukcję asynchroniczną środowisko wykonawcze systemu Windows opartą na podanym przez użytkownika obiekcie lambda lub funkcji. Zwracany create_async typ jest jednym z IAsyncAction^, , IAsyncActionWithProgress<TProgress>^IAsyncOperation<TResult>^lub IAsyncOperationWithProgress<TResult, TProgress>^ na podstawie podpisu lambda przekazanego do metody .

template<typename _Function>
__declspec(noinline) auto create_async(const _Function& _Func)
    -> decltype(ref new details::_AsyncTaskGeneratorThunk<_Function>(_Func));

Parametry

_Funkcja
Typ.

_Func
Obiekt lambda lub funkcja, z którego ma zostać utworzona konstrukcja asynchroniczna środowisko wykonawcze systemu Windows.

Wartość zwracana

Asynchroniczna konstrukcja reprezentowana przez element IAsyncAction^, IAsyncActionWithProgress TProgress<>^, IAsyncOperation TResult>^lub IAsyncOperationWithProgress<<TResult, TProgress>^. Zwrócony interfejs zależy od podpisu lambda przekazanego do funkcji.

Uwagi

Zwracany typ lambda określa, czy konstrukcja jest akcją, czy operacją.

Lambdas, które zwracają pustkę, powodują tworzenie akcji. Lambdy zwracające wynik typu TResult powodują utworzenie operacji TResult.

Lambda może również zwrócić task<TResult> element, który hermetyzuje pracę aysnchroniczną w sobie lub jest kontynuacją łańcucha zadań reprezentujących pracę asynchroniczną. W tym przypadku sama lambda jest wykonywana w tekście, ponieważ zadania są tymi, które są wykonywane asynchronicznie, a zwracany typ lambda jest niezapisany w celu utworzenia konstrukcji asynchronicznej zwracanej przez create_asyncelement . Oznacza to, że lambda zwracająca pustkę> zadania<spowoduje utworzenie akcji, a lambda zwracająca zadanie<TResult spowoduje utworzenie operacji TResult>.

Lambda może przyjmować zero, jeden lub dwa argumenty. Prawidłowe argumenty to progress_reporter<TProgress> i cancellation_token, w tej kolejności, jeśli są używane oba. Lambda bez argumentów powoduje utworzenie konstrukcji asynchronicznej bez możliwości raportowania postępu. Lambda, która przyjmuje progress_reporter<TProgress> spowoduje create_async zwrócenie asynchronicznej konstrukcji, która zgłasza postęp typu TProgress za każdym razem, gdy report wywoływana jest metoda obiektu progress_reporter. Lambda, która przyjmuje cancellation_token może używać tego tokenu do sprawdzania anulowania lub przekazać go do zadań tworzonych w taki sposób, aby anulowanie konstrukcji asynchronicznej powodowało anulowanie tych zadań.

Jeśli treść obiektu lambda lub funkcji zwraca wynik (a nie zadanie<TResult>), lamdba zostanie wykonana asynchronicznie w procesie MTA w kontekście zadania, które środowisko uruchomieniowe tworzy niejawnie. Metoda IAsyncInfo::Cancel spowoduje anulowanie niejawnego zadania.

Jeśli treść lambda zwraca zadanie, funkcja lamba wykonuje w tekście i deklarując lambda do podjęcia argumentu typu cancellation_token , możesz wyzwolić anulowanie wszystkich zadań utworzonych w ramach lambda, przekazując ten token podczas ich tworzenia. Możesz również użyć register_callback metody na tokenie, aby wywołać wywołanie zwrotne w czasie wywołania zwrotnego podczas wywoływania IAsyncInfo::Cancel operacji asynchronicznej lub utworzonej akcji.

Ta funkcja jest dostępna tylko dla środowisko wykonawcze systemu Windows aplikacji.

CreateResourceManager

Zwraca interfejs reprezentujący pojedyncze wystąpienie usługi Resource Manager środowiska uruchomieniowego współbieżności. Usługa Resource Manager jest odpowiedzialna za przypisywanie zasobów do harmonogramów, które chcą współpracować ze sobą.

IResourceManager* __cdecl CreateResourceManager();

Wartość zwracana

Interfejs IResourceManager .

Uwagi

Wiele kolejnych wywołań tej metody zwróci to samo wystąpienie usługi Resource Manager. Każde wywołanie metody zwiększa liczbę odwołań w usłudze Resource Manager i musi być zgodne z wywołaniem metody IResourceManager::Release po zakończeniu komunikacji z usługą Resource Manager.

unsupported_os jest zgłaszany, jeśli system operacyjny nie jest obsługiwany przez środowisko uruchomieniowe współbieżności.

create_task

Tworzy obiekt zadania PPL. create_task można użyć w dowolnym miejscu, w którym można użyć konstruktora zadań. Jest ona udostępniana głównie dla wygody, ponieważ umożliwia używanie słowa kluczowego auto podczas tworzenia zadań.

template<typename T>
__declspec(noinline) auto create_task(T _Param, const task_options& _TaskOptions = task_options())
    -> task<typename details::_TaskTypeFromParam<T>::T>;

template<typename _ReturnType>
__declspec( noinline) task<_ReturnType> create_task(const task<_ReturnType>& _Task);

Parametry

T
Typ parametru, z którego ma zostać skonstruowane zadanie.

_Returntype
Typ.

_Param
Parametr, z którego ma zostać skonstruowane zadanie. Może to być obiekt lambda lub funkcja, task_completion_event obiekt, inny task obiekt lub interfejs Windows::Foundation::IAsyncInfo, jeśli używasz zadań w aplikacji platformy UWP.

_TaskOptions
Opcje zadania.

_Zadanie
Zadanie do utworzenia.

Wartość zwracana

Nowe zadanie typu T, które jest wywnioskowane z _Param.

Uwagi

Pierwsze przeciążenie zachowuje się jak konstruktor zadań, który przyjmuje pojedynczy parametr.

Drugie przeciążenie kojarzy token anulowania dostarczony z nowo utworzonym zadaniem. Jeśli używasz tego przeciążenia, nie możesz przekazać innego task obiektu jako pierwszego parametru.

Typ zwróconego zadania jest wnioskowany z pierwszego parametru do funkcji. Jeśli _Param jest elementem task_completion_event<T>, , task<T>lub functorem, który zwraca typ T lub task<T>, typ utworzonego zadania to task<T>.

W aplikacji platformy UWP, jeśli _Param jest typu Windows::Foundation::IAsyncOperation<T>^ lub Windows::Foundation::IAsyncOperationWithProgress<T,P>^, lub functor, który zwraca jeden z tych typów, utworzone zadanie będzie typu task<T>. Jeśli _Param jest typu Windows::Foundation::IAsyncAction^ lub Windows::Foundation::IAsyncActionWithProgress<P>^, lub functor, który zwraca jeden z tych typów, utworzone zadanie będzie mieć typ task<void>.

DisableTracing

Wyłącza śledzenie w środowisku uruchomieniowym współbieżności. Ta funkcja jest przestarzała, ponieważ śledzenie ETW jest domyślnie wyrejestrowane.

__declspec(deprecated("Concurrency::DisableTracing is a deprecated function.")) _CRTIMP HRESULT __cdecl DisableTracing();

Wartość zwracana

Jeśli śledzenie zostało poprawnie wyłączone, S_OK jest zwracany. Jeśli śledzenie nie zostało wcześniej zainicjowane, E_NOT_STARTED zwracana jest wartość

Włączanie tracingu

Włącza śledzenie w środowisku uruchomieniowym współbieżności. Ta funkcja jest przestarzała, ponieważ śledzenie ETW jest teraz domyślnie włączone.

__declspec(deprecated("Concurrency::EnableTracing is a deprecated function.")) _CRTIMP HRESULT __cdecl EnableTracing();

Wartość zwracana

Jeśli śledzenie zostało poprawnie zainicjowane, S_OK jest zwracane; w przeciwnym razie E_NOT_STARTED jest zwracany.

Bezpłatne

Zwalnia blok pamięci przydzielonej wcześniej przez Alloc metodę do środowiska uruchomieniowego współbieżności Buforowanie podrzędnego przydziału.

void __cdecl Free(_Pre_maybenull_ _Post_invalid_ void* _PAllocation);

Parametry

_PAllocation
Wskaźnik do pamięci przydzielonej wcześniej przez Alloc metodę, która ma zostać zwolniona. Jeśli parametr _PAllocation jest ustawiony na wartość NULL, ta metoda zignoruje go i zwróci natychmiast.

Uwagi

Aby uzyskać więcej informacji na temat scenariuszy w aplikacji, które mogą korzystać z narzędzia Buforowanie Suballocator, zobacz Harmonogram zadań.

get_ambient_scheduler

inline std::shared_ptr<::Concurrency::scheduler_interface> get_ambient_scheduler();

Wartość zwracana

GetExecutionContextId

Zwraca unikatowy identyfikator, który można przypisać do kontekstu wykonywania, który implementuje IExecutionContext interfejs.

unsigned int __cdecl GetExecutionContextId();

Wartość zwracana

Unikatowy identyfikator kontekstu wykonywania.

Uwagi

Użyj tej metody, aby uzyskać identyfikator kontekstu wykonywania przed przekazaniem IExecutionContext interfejsu jako parametru do dowolnej metody oferowanej przez usługę Resource Manager.

GetOSVersion

Zwraca wersję systemu operacyjnego.

IResourceManager::OSVersion __cdecl GetOSVersion();

Wartość zwracana

Wyliczona wartość reprezentująca system operacyjny.

Uwagi

unsupported_os jest zgłaszany, jeśli system operacyjny nie jest obsługiwany przez środowisko uruchomieniowe współbieżności.

GetProcessorCount

Zwraca liczbę wątków sprzętowych w systemie bazowym.

unsigned int __cdecl GetProcessorCount();

Wartość zwracana

Liczba wątków sprzętowych.

Uwagi

unsupported_os jest zgłaszany, jeśli system operacyjny nie jest obsługiwany przez środowisko uruchomieniowe współbieżności.

GetProcessorNodeCount

Zwraca liczbę węzłów NUMA lub pakietów procesora w systemie bazowym.

unsigned int __cdecl GetProcessorNodeCount();

Wartość zwracana

Liczba węzłów NUMA lub pakietów procesora.

Uwagi

Jeśli system zawiera więcej węzłów NUMA niż pakiety procesora, zwracana jest liczba węzłów NUMA. W przeciwnym razie zwracana jest liczba pakietów procesora.

unsupported_os jest zgłaszany, jeśli system operacyjny nie jest obsługiwany przez środowisko uruchomieniowe współbieżności.

GetSchedulerId

Zwraca unikatowy identyfikator, który można przypisać do harmonogramu implementującego IScheduler interfejs.

unsigned int __cdecl GetSchedulerId();

Wartość zwracana

Unikatowy identyfikator harmonogramu.

Uwagi

Użyj tej metody, aby uzyskać identyfikator harmonogramu przed przekazaniem IScheduler interfejsu jako parametru do dowolnej metody oferowanej przez usługę Resource Manager.

internal_assign_iterators

template<typename T, class _Ax>
template<class _I>
void concurrent_vector<T, _Ax>::internal_assign_iterators(
   _I first,
   _I last);

Parametry

T

_Ax

_I

Pierwszym

Ostatnio

interruption_point

Tworzy punkt przerwania dla anulowania. Jeśli anulowanie jest w toku w kontekście, w którym jest wywoływana ta funkcja, zgłosi wyjątek wewnętrzny, który przerywa wykonywanie aktualnie wykonywanej pracy równoległej. Jeśli anulowanie nie jest w toku, funkcja nic nie robi.

inline void interruption_point();

Uwagi

Nie należy przechwytywać wyjątku wewnętrznego anulowania zgłaszanego interruption_point() przez funkcję. Wyjątek zostanie przechwycony i obsłużony przez środowisko uruchomieniowe i przechwycenie go może spowodować, że program zachowuje się nieprawidłowo.

is_current_task_group_canceling

Zwraca wskazanie, czy grupa zadań, która aktualnie wykonuje wbudowane w bieżącym kontekście, znajduje się w trakcie aktywnego anulowania (lub wkrótce). Należy pamiętać, że jeśli nie ma obecnie wykonywanej wbudowanej grupy zadań w bieżącym kontekście, false zostanie zwrócona.

bool __cdecl is_current_task_group_canceling();

Wartość zwracana

true jeśli grupa zadań, która jest aktualnie uruchamiana, jest anulowana, false w przeciwnym razie.

Uwagi

Aby uzyskać więcej informacji, zobacz Anulowanie.

make_choice

Tworzy blok obsługi komunikatów choice z opcjonalnych Scheduler lub ScheduleGroup i dwóch lub więcej źródeł danych wejściowych.

template<typename T1, typename T2, typename... Ts>
choice<std::tuple<T1, T2, Ts...>> make_choice(
    Scheduler& _PScheduler,
    T1  _Item1,
    T2  _Item2,
    Ts... _Items);

template<typename T1, typename T2, typename... Ts>
choice<std::tuple<T1, T2, Ts...>> make_choice(
    ScheduleGroup& _PScheduleGroup,
    T1  _Item1,
    T2  _Item2,
    Ts... _Items);

template<typename T1, typename T2, typename... Ts>
choice<std::tuple<T1, T2, Ts...>> make_choice(
    T1  _Item1,
    T2  _Item2,
    Ts... _Items);

Parametry

T1
Typ bloku komunikatów pierwszego źródła.

T2
Typ bloku komunikatów drugiego źródła.

_PScheduler
Obiekt Scheduler , w którym zaplanowano zadanie choice propagacji bloku obsługi komunikatów.

_Item1
Pierwsze źródło.

_Item2
Drugie źródło.

_Elementy
Dodatkowe źródła.

_PScheduleGroup
Obiekt ScheduleGroup , w którym zaplanowano zadanie choice propagacji bloku obsługi komunikatów. Używany Scheduler obiekt jest dorozumiany przez grupę harmonogramu.

Wartość zwracana

Blok komunikatów z co najmniej dwoma choice źródłami wejściowymi.

make_greedy_join

Tworzy blok obsługi komunikatów greedy multitype_join z opcjonalnych Scheduler lub ScheduleGroup i dwóch lub więcej źródeł danych wejściowych.

template<typename T1, typename T2, typename... Ts>
multitype_join<std::tuple<T1, T2, Ts...>,greedy> make_greedy_join(
    Scheduler& _PScheduler,
    T1 _Item1,
    T2 _Item2,
    Ts... _Items);

template<typename T1, typename T2, typename... Ts>
multitype_join<std::tuple<T1, T2, Ts...>, greedy> make_greedy_join(
    ScheduleGroup& _PScheduleGroup,
    T1 _Item1,
    T2 _Item2,
    Ts... _Items);

template<typename T1, typename T2, typename... Ts>
multitype_join<std::tuple<T1, T2, Ts...>, greedy> make_greedy_join(
    T1 _Item1,
    T2 _Items,
    Ts... _Items);

Parametry

T1
Typ bloku komunikatów pierwszego źródła.

T2
Typ bloku komunikatów drugiego źródła.

_PScheduler
Obiekt Scheduler , w którym zaplanowano zadanie multitype_join propagacji bloku obsługi komunikatów.

_Item1
Pierwsze źródło.

_Item2
Drugie źródło.

_Elementy
Dodatkowe źródła.

_PScheduleGroup
Obiekt ScheduleGroup , w którym zaplanowano zadanie multitype_join propagacji bloku obsługi komunikatów. Używany Scheduler obiekt jest dorozumiany przez grupę harmonogramu.

Wartość zwracana

Blok komunikatów z co najmniej dwoma greedy multitype_join źródłami wejściowymi.

make_join

Tworzy blok obsługi komunikatów non_greedy multitype_join z opcjonalnych Scheduler lub ScheduleGroup i dwóch lub więcej źródeł danych wejściowych.

template<typename T1, typename T2, typename... Ts>
multitype_join<std::tuple<T1, T2, Ts...>>
    make_join(
Scheduler& _PScheduler,
    T1 _Item1,
    T2 _Item2,
    Ts... _Items);

template<typename T1, typename T2, typename... Ts>
multitype_join<std::tuple<T1, T2, Ts...>> make_join(
ScheduleGroup& _PScheduleGroup,
    T1 _Item1,
    T2 _Item2,
    Ts... _Items);

template<typename T1, typename T2, typename... Ts>
multitype_join<std::tuple<T1, T2, Ts...>> make_join(
    T1 _Item1,
    T2 _Item2,
    Ts... _Items);

Parametry

T1
Typ bloku komunikatów pierwszego źródła.

T2
Typ bloku komunikatów drugiego źródła.

_PScheduler
Obiekt Scheduler , w którym zaplanowano zadanie multitype_join propagacji bloku obsługi komunikatów.

_Item1
Pierwsze źródło.

_Item2
Drugie źródło.

_Elementy
Dodatkowe źródła.

_PScheduleGroup
Obiekt ScheduleGroup , w którym zaplanowano zadanie multitype_join propagacji bloku obsługi komunikatów. Używany Scheduler obiekt jest dorozumiany przez grupę harmonogramu.

Wartość zwracana

Blok komunikatów z co najmniej dwoma non_greedy multitype_join źródłami wejściowymi.

make_task

Metoda fabryki do tworzenia task_handle obiektu.

template <class _Function>
task_handle<_Function> make_task(const _Function& _Func);

Parametry

_Funkcja
Typ obiektu funkcji, który zostanie wywołany w celu wykonania pracy reprezentowanej task_handle przez obiekt.

_Func
Funkcja, która zostanie wywołana w celu wykonania pracy reprezentowanej task_handle przez obiekt. Może to być functor lambda, wskaźnik do funkcji lub dowolny obiekt obsługujący wersję operatora wywołania funkcji z podpisem void operator()().

Wartość zwracana

Obiekt task_handle.

Uwagi

Ta funkcja jest przydatna, gdy trzeba utworzyć task_handle obiekt z wyrażeniem lambda, ponieważ umożliwia utworzenie obiektu bez znajomości prawdziwego typu functor lambda.

parallel_buffered_sort

Rozmieszcza elementy w określonym zakresie w kolejność niezstąpiącą lub zgodnie z kryterium porządkowania określonym przez predykat binarny równolegle. Ta funkcja jest semantycznie podobna do std::sort w tym, że jest to sortowanie oparte na porównaniach, niestabilne, w miejscu, z wyjątkiem tego, że wymaga O(n) dodatkowego miejsca i wymaga domyślnej inicjowania dla posortowanych elementów.

template<typename _Random_iterator>
inline void parallel_buffered_sort(
    const _Random_iterator& _Begin,
    const _Random_iterator& _End);

template<typename _Allocator,
    typename _Random_iterator>
inline void parallel_buffered_sort(
    const _Random_iterator& _Begin,
    const _Random_iterator& _End);

template<typename _Allocator,
    typename _Random_iterator>
inline void parallel_buffered_sort(
    const _Allocator& _Alloc,
    const _Random_iterator& _Begin,
    const _Random_iterator& _End);

template<typename _Random_iterator,
    typename _Function>
inline void parallel_buffered_sort(
    const _Random_iterator& _Begin,
    const _Random_iterator& _End,
    const _Function& _Func,
    const size_t _Chunk_size = 2048);

template<typename _Allocator,
    typename _Random_iterator,
    typename _Function>
inline void parallel_buffered_sort(
    const _Random_iterator& _Begin,
    const _Random_iterator& _End,
    const _Function& _Func,
    const size_t _Chunk_size = 2048);

template<typename _Allocator,
    typename _Random_iterator,
    typename _Function>
inline void parallel_buffered_sort(
    const _Allocator& _Alloc,
    const _Random_iterator& _Begin,
    const _Random_iterator& _End,
    const _Function& _Func,
    const size_t _Chunk_size = 2048);

Parametry

_Random_iterator
Typ iteratora zakresu danych wejściowych.

_Programu przydzielania
Typ alokatora pamięci zgodnego z biblioteką standardową języka C++.

_Funkcja
Typ komparatora binarnego.

_Rozpocząć
Iterator dostępu losowego odnoszący się do pozycji pierwszego elementu w zakresie do sortowania.

_Końcu
Iterator dostępu losowego odnoszący się do pozycji jednej obok ostatniego elementu w zakresie, który ma zostać posortowany.

_Alloc
Wystąpienie alokatora pamięci zgodnej z biblioteką standardową języka C++.

_Func
Obiekt funkcji predykatu zdefiniowanego przez użytkownika, który definiuje kryterium porównania, które ma być spełnione przez kolejne elementy w kolejności. Predykat binarny przyjmuje dwa argumenty i zwraca, true gdy jest spełniony, a false gdy nie jest spełniony. Ta funkcja komparatora musi nakładać ścisłe słabe kolejność na pary elementów z sekwencji.

_Chunk_size
Rozmiar mimimum fragmentu, który zostanie podzielony na dwa na potrzeby wykonywania równoległego.

Uwagi

Wszystkie przeciążenia wymagają n * sizeof(T) dodatkowego miejsca, gdzie n jest liczba elementów do sortowania i T jest typem elementu. W większości przypadków parallel_buffered_sort pokaże poprawę wydajności w porównaniu z parallel_sort i należy go użyć za pośrednictwem parallel_sort, jeśli masz dostępną pamięć.

Jeśli nie podasz binarnego komparatora std::less , zostanie użyty jako domyślny, co wymaga, aby typ elementu podał operator operator<().

Jeśli nie podasz typu lub wystąpienia alokatora, alokator std::allocator<T> pamięci standardowej języka C++ zostanie użyty do przydzielenia buforu.

Algorytm dzieli zakres danych wejściowych na dwa fragmenty, a następnie dzieli każdy fragment na dwa fragmenty podrzędne w celu równoległego wykonywania. Opcjonalny argument _Chunk_size może służyć do wskazywania algorytmowi, który powinien obsługiwać fragmenty rozmiaru <_Chunk_size szeregowego.

Parallel_for

parallel_for wykonuje iterację w zakresie indeksów i wykonuje funkcję dostarczaną przez użytkownika w każdej iteracji równolegle.

template <typename _Index_type, typename _Function, typename _Partitioner>
void parallel_for(
    _Index_type first,
    _Index_type last,
    _Index_type _Step,
    const _Function& _Func,
    _Partitioner&& _Part);

template <typename _Index_type, typename _Function>
void parallel_for(
    _Index_type first,
    _Index_type last,
    _Index_type _Step,
    const _Function& _Func);

template <typename _Index_type, typename _Function>
void parallel_for(
    _Index_type first,
    _Index_type last,
    const _Function& _Func,
    const auto_partitioner& _Part = auto_partitioner());

template <typename _Index_type, typename _Function>
void parallel_for(
    _Index_type first,
    _Index_type last,
    const _Function& _Func,
    const static_partitioner& _Part);

template <typename _Index_type, typename _Function>
void parallel_for(
    _Index_type first,
    _Index_type last,
    const _Function& _Func,
    const simple_partitioner& _Part);

template <typename _Index_type, typename _Function>
void parallel_for(
    _Index_type first,
    _Index_type last,
    const _Function& _Func,
    affinity_partitioner& _Part);

Parametry

_Index_type
Typ indeksu używanego do iteracji.

_Funkcja
Typ funkcji, która zostanie wykonana w każdej iteracji.

_Partycjonowania
Typ partycjonatora używanego do partycjonowania podanego zakresu.

Pierwszym
Pierwszy indeks, który ma zostać uwzględniony w iteracji.

Ostatnio
Indeks przeszłości ostatniego indeksu, który ma zostać uwzględniony w iteracji.

_Krok
Wartość, za pomocą której należy wykonać iterację z first do last. Krok musi być pozytywny. invalid_argument jest zgłaszany, jeśli krok jest mniejszy niż 1.

_Func
Funkcja, która ma być wykonywana w każdej iteracji. Może to być wyrażenie lambda, wskaźnik funkcji lub dowolny obiekt obsługujący wersję operatora wywołania funkcji z podpisem void operator()(_Index_type).

_Części
Odwołanie do obiektu partycjonatora. Argument może być jednym z constauto_partitioner&,const static_partitioner&,const simple_partitioner& lub affinity_partitioner& Jeśli jest używany obiekt affinity_partitioner, odwołanie musi być odwołaniem innym niż const l-value, aby algorytm mógł przechowywać stan dla przyszłych pętli do ponownego użycia.

Uwagi

Aby uzyskać więcej informacji, zobacz Parallel Algorithms (Algorytmy równoległe).

Parallel_for_each

parallel_for_each stosuje określoną funkcję do każdego elementu w zakresie równolegle. Jest ona semantycznie równoważna for_each funkcji w std przestrzeni nazw, z tą różnicą, że iteracja nad elementami jest wykonywana równolegle, a kolejność iteracji jest nieokreślona. Argument _Func musi obsługiwać operator wywołania funkcji formularza operator()(T) , w którym parametr T jest typem elementu kontenera, który jest iteracja.

template <typename _Iterator, typename _Function>
void parallel_for_each(
    _Iterator first,
    _Iterator last,
    const _Function& _Func);

template <typename _Iterator, typename _Function, typename _Partitioner>
void parallel_for_each(
    _Iterator first,
    _Iterator last,
    const _Function& _Func,
    _Partitioner&& _Part);

Parametry

_Sterująca
Typ iteratora używanego do iterowania kontenera.

_Funkcja
Typ funkcji, która zostanie zastosowana do każdego elementu w zakresie.

_Partycjonowania
Pierwszym
Iterator odnoszący się do pozycji pierwszego elementu, który ma zostać uwzględniony w iteracji równoległej.

Ostatnio
Iterator odnoszący się do pozycji jednej obok ostatniego elementu, który ma zostać uwzględniony w iteracji równoległej.

_Func
Obiekt funkcji zdefiniowany przez użytkownika, który jest stosowany do każdego elementu w zakresie.

_Części
Odwołanie do obiektu partycjonatora. Argument może być jednym z constauto_partitioner&,const static_partitioner&,const simple_partitioner& lub affinity_partitioner& Jeśli jest używany obiekt affinity_partitioner, odwołanie musi być odwołaniem innym niż const l-value, aby algorytm mógł przechowywać stan dla przyszłych pętli do ponownego użycia.

Uwagi

auto_partitioner będą używane dla przeciążenia bez jawnego partycjonatora.

W przypadku iteratorów, które nie obsługują dostępu losowego, obsługiwane są tylko auto_partitioner .

Aby uzyskać więcej informacji, zobacz Parallel Algorithms (Algorytmy równoległe).

Parallel_invoke

Wykonuje obiekty funkcji podane równolegle jako parametry i blokuje je do momentu zakończenia wykonywania. Każdy obiekt funkcji może być wyrażeniem lambda, wskaźnikiem do funkcji lub dowolnym obiektem obsługującym operator wywołania funkcji z podpisem void operator()().

template <typename _Function1, typename _Function2>
void parallel_invoke(
    const _Function1& _Func1,
    const _Function2& _Func2);

template <typename _Function1, typename _Function2, typename _Function3>
void parallel_invoke(
    const _Function1& _Func1,
    const _Function2& _Func2,
    const _Function3& _Func3);

template <typename _Function1,
    typename _Function2,
    typename _Function3,
    typename _Function4>
void parallel_invoke(
    const _Function1& _Func1,
    const _Function2& _Func2,
    const _Function3& _Func3,
    const _Function4& _Func4);

template <typename _Function1,
    typename _Function2,
    typename _Function3,
    typename _Function4,
    typename _Function5>
void parallel_invoke(
    const _Function1& _Func1,
    const _Function2& _Func2,
    const _Function3& _Func3,
    const _Function4& _Func4,
    const _Function5& _Func5);

template <typename _Function1,
    typename _Function2,
    typename _Function3,
    typename _Function4,
    typename _Function5,
    typename _Function6>
void parallel_invoke(
    const _Function1& _Func1,
    const _Function2& _Func2,
    const _Function3& _Func3,
    const _Function4& _Func4,
    const _Function5& _Func5,
    const _Function6& _Func6);

template <typename _Function1,
    typename _Function2,
    typename _Function3,
    typename _Function4,
    typename _Function5,
    typename _Function6,
    typename _Function7>
void parallel_invoke(
    const _Function1& _Func1,
    const _Function2& _Func2,
    const _Function3& _Func3,
    const _Function4& _Func4,
    const _Function5& _Func5,
    const _Function6& _Func6,
    const _Function7& _Func7);

template <typename _Function1,
    typename _Function2,
    typename _Function3,
    typename _Function4,
    typename _Function5,
    typename _Function6,
    typename _Function7,
    typename _Function8>
void parallel_invoke(
    const _Function1& _Func1,
    const _Function2& _Func2,
    const _Function3& _Func3,
    const _Function4& _Func4,
    const _Function5& _Func5,
    const _Function6& _Func6,
    const _Function7& _Func7,
    const _Function8& _Func8);

template <typename _Function1,
    typename _Function2,
    typename _Function3,
    typename _Function4,
    typename _Function5,
    typename _Function6,
    typename _Function7,
    typename _Function8,
    typename _Function9>
void parallel_invoke(
    const _Function1& _Func1,
    const _Function2& _Func2,
    const _Function3& _Func3,
    const _Function4& _Func4,
    const _Function5& _Func5,
    const _Function6& _Func6,
    const _Function7& _Func7,
    const _Function8& _Func8,
    const _Function9& _Func9);

template <typename _Function1,
    typename _Function2,
    typename _Function3,
    typename _Function4,
    typename _Function5,
    typename _Function6,
    typename _Function7,
    typename _Function8,
    typename _Function9,
    typename _Function10>
void parallel_invoke(
    const _Function1& _Func1,
    const _Function2& _Func2,
    const _Function3& _Func3,
    const _Function4& _Func4,
    const _Function5& _Func5,
    const _Function6& _Func6,
    const _Function7& _Func7,
    const _Function8& _Func8,
    const _Function9& _Func9,
    const _Function10& _Func10);

Parametry

_Function1
Typ pierwszego obiektu funkcji, który ma być wykonywany równolegle.

_Function2
Typ drugiego obiektu funkcji do wykonania równolegle.

_Function3
Typ trzeciego obiektu funkcji, który ma być wykonywany równolegle.

_Function4
Typ czwartego obiektu funkcji, który ma być wykonywany równolegle.

_Function5
Typ piątego obiektu funkcji, który ma być wykonywany równolegle.

_Function6
Typ szóstego obiektu funkcji, który ma być wykonywany równolegle.

_Function7
Typ obiektu siódmej funkcji, który ma być wykonywany równolegle.

_Function8
Typ obiektu funkcji ósmej, który ma być wykonywany równolegle.

_Function9
Typ dziewiątego obiektu funkcji do wykonania równolegle.

_Function10
Typ dziesiątego obiektu funkcji, który ma być wykonywany równolegle.

_Func1
Pierwszy obiekt funkcji, który ma być wykonywany równolegle.

_Func2
Drugi obiekt funkcji do wykonania równolegle.

_Func3
Trzeci obiekt funkcji, który ma być wykonywany równolegle.

_Func4
Czwarty obiekt funkcji, który ma być wykonywany równolegle.

_Func5
Piąty obiekt funkcji, który ma być wykonywany równolegle.

_Func6
Szósty obiekt funkcji, który ma być wykonywany równolegle.

_Func7
Siódmy obiekt funkcji, który ma być wykonywany równolegle.

_Func8
Ósmy obiekt funkcji, który ma być wykonywany równolegle.

_Func9
Dziewiąty obiekt funkcji, który ma być wykonywany równolegle.

_Func10
Dziesiąty obiekt funkcji, który ma być wykonywany równolegle.

Uwagi

Należy pamiętać, że co najmniej jeden obiekt funkcji podany jako parametry może być wykonywany w tekście w kontekście wywołującym.

Jeśli co najmniej jeden obiekt funkcji przekazany jako parametry tej funkcji zgłasza wyjątek, środowisko uruchomieniowe wybierze jeden taki wyjątek od wybranego obiektu i rozpropaguje go z wywołania metody parallel_invoke.

Aby uzyskać więcej informacji, zobacz Parallel Algorithms (Algorytmy równoległe).

parallel_radixsort

Rozmieszcza elementy w określonym zakresie w kolejność niezstąpiącą przy użyciu algorytmu sortowania promieniowego. Jest to stabilna funkcja sortowania, która wymaga funkcji projekcji, która umożliwia sortowanie elementów w niepodpisane klucze całkowite. Inicjowanie domyślne jest wymagane dla posortowanych elementów.

template<typename _Random_iterator>
inline void parallel_radixsort(
    const _Random_iterator& _Begin,
    const _Random_iterator& _End);

template<typename _Allocator, typename _Random_iterator>
inline void parallel_radixsort(
    const _Random_iterator& _Begin,
    const _Random_iterator& _End);

template<typename _Allocator, typename _Random_iterator>
inline void parallel_radixsort(
    const _Allocator& _Alloc,
    const _Random_iterator& _Begin,
    const _Random_iterator& _End);

template<typename _Random_iterator, typename _Function>
inline void parallel_radixsort(
    const _Random_iterator& _Begin,
    const _Random_iterator& _End,
    const _Function& _Proj_func,
    const size_t _Chunk_size = 256* 256);

template<typename _Allocator, typename _Random_iterator,
    typename _Function>
inline void parallel_radixsort(
    const _Random_iterator& _Begin,
    const _Random_iterator& _End,
    const _Function& _Proj_func,
    const size_t _Chunk_size = 256* 256);

template<typename _Allocator,
    typename _Random_iterator,
    typename _Function>
inline void parallel_radixsort(
    const _Allocator& _Alloc,
    const _Random_iterator& _Begin,
    const _Random_iterator& _End,
    const _Function& _Proj_func,
    const size_t _Chunk_size = 256* 256);

Parametry

_Random_iterator
Typ iteratora zakresu danych wejściowych.

_Programu przydzielania
Typ alokatora pamięci zgodnego z biblioteką standardową języka C++.

_Funkcja
Typ funkcji projekcji.

_Rozpocząć
Iterator dostępu losowego odnoszący się do pozycji pierwszego elementu w zakresie do sortowania.

_Końcu
Iterator dostępu losowego odnoszący się do pozycji jednej obok ostatniego elementu w zakresie, który ma zostać posortowany.

_Alloc
Wystąpienie alokatora pamięci zgodnej z biblioteką standardową języka C++.

_Proj_func
Obiekt funkcji projekcji zdefiniowanej przez użytkownika, który konwertuje element na wartość całkowitą.

_Chunk_size
Rozmiar mimimum fragmentu, który zostanie podzielony na dwa na potrzeby wykonywania równoległego.

Uwagi

Wszystkie przeciążenia wymagają n * sizeof(T) dodatkowego miejsca, gdzie n jest liczba elementów do sortowania i T jest typem elementu. Do zwrócenia klucza w przypadku danego elementu jest wymagany jednoargumentowy functor projekcji z podpisem I _Proj_func(T) , gdzie T jest typem elementu i I jest niepodpisany typ całkowitoliczbowy.

Jeśli nie podasz funkcji projekcji, domyślna funkcja projekcji, która po prostu zwraca element jest używany dla typów całkowitych. Nie można skompilować funkcji, jeśli element nie jest typem całkowitym w przypadku braku funkcji projekcji.

Jeśli nie podasz typu lub wystąpienia alokatora, alokator std::allocator<T> pamięci standardowej języka C++ zostanie użyty do przydzielenia buforu.

Algorytm dzieli zakres danych wejściowych na dwa fragmenty, a następnie dzieli każdy fragment na dwa fragmenty podrzędne w celu równoległego wykonywania. Opcjonalny argument _Chunk_size może służyć do wskazywania algorytmowi, który powinien obsługiwać fragmenty rozmiaru <_Chunk_size szeregowego.

parallel_reduce

Oblicza sumę wszystkich elementów w określonym zakresie, obliczając kolejne sumy częściowe lub oblicza wynik kolejnych częściowych wyników uzyskanych podobnie z użyciem określonej operacji binarnej innej niż suma, równolegle. parallel_reduce jest semantycznie podobny do std::accumulate, z tą różnicą, że wymaga skojarzenia operacji binarnej i wymaga wartości tożsamości zamiast wartości początkowej.

template<typename _Forward_iterator>
inline typename std::iterator_traits<_Forward_iterator>::value_type parallel_reduce(
    _Forward_iterator _Begin,
    _Forward_iterator _End,
    const typename std::iterator_traits<_Forward_iterator>::value_type& _Identity);

template<typename _Forward_iterator, typename _Sym_reduce_fun>
inline typename std::iterator_traits<_Forward_iterator>::value_type parallel_reduce(
    _Forward_iterator _Begin,
    _Forward_iterator _End,
    const typename std::iterator_traits<_Forward_iterator>::value_type& _Identity,
    _Sym_reduce_fun _Sym_fun);

template<typename _Reduce_type,
    typename _Forward_iterator,
    typename _Range_reduce_fun,
    typename _Sym_reduce_fun>
inline _Reduce_type parallel_reduce(
    _Forward_iterator _Begin,
    _Forward_iterator _End,
    const _Reduce_type& _Identity,
    const _Range_reduce_fun& _Range_fun,
    const _Sym_reduce_fun& _Sym_fun);

Parametry

_Forward_iterator
Typ iteratora zakresu danych wejściowych.

_Sym_reduce_fun
Typ funkcji redukcji symetrycznej. Musi to być typ funkcji z podpisem _Reduce_type _Sym_fun(_Reduce_type, _Reduce_type), gdzie _Reduce_type jest taki sam jak typ tożsamości i typ wyniku redukcji. W przypadku trzeciego przeciążenia powinno to być zgodne z typem danych wyjściowych klasy _Range_reduce_fun.

_Reduce_type
Typ, do którego dane wejściowe zostaną zredukowane, co może różnić się od typu elementu wejściowego. Wartość zwracana i wartość tożsamości będą zawierać ten typ.

_Range_reduce_fun
Typ funkcji redukcji zakresu. Musi to być typ funkcji z podpisem _Reduce_type _Range_fun(_Forward_iterator, _Forward_iterator, _Reduce_type), _Reduce_type jest taki sam jak typ tożsamości i typ wyniku redukcji.

_Rozpocząć
Iterator wejściowy odnoszący się do pierwszego elementu w zakresie, który ma zostać zredukowany.

_Końcu
Iterator wejściowy odnoszący się do elementu, który jest jednym położeniem poza ostatnim elementem w zakresie, który ma zostać zmniejszony.

_Tożsamości
Wartość _Identity tożsamości jest tego samego typu co typ wyniku redukcji, a także value_type iterator pierwszego i drugiego przeciążenia. W przypadku trzeciego przeciążenia wartość tożsamości musi mieć taki sam typ jak typ wyniku redukcji, ale może być inna niż value_type iterator. Musi mieć odpowiednią wartość, tak aby operator _Range_funredukcji zakresu , po zastosowaniu do zakresu pojedynczego elementu typu value_type i wartości tożsamości zachowywał się jak rzutowanie wartości typu z typu value_type na typ tożsamości.

_Sym_fun
Funkcja symetryczna, która będzie używana w drugiej części redukcji. Aby uzyskać więcej informacji, zapoznaj się z uwagami.

_Range_fun
Funkcja, która będzie używana w pierwszej fazie redukcji. Aby uzyskać więcej informacji, zapoznaj się z uwagami.

Wartość zwracana

Wynik redukcji.

Uwagi

Aby przeprowadzić redukcję równoległą, funkcja dzieli zakres na fragmenty na podstawie liczby procesów roboczych dostępnych dla bazowego harmonogramu. Redukcja odbywa się w dwóch fazach, pierwsza faza wykonuje redukcję w poszczególnych fragmentach, a druga faza wykonuje redukcję między częściowymi wynikami z każdego fragmentu.

Pierwsze przeciążenie wymaga, aby iterator value_typeT, był taki sam jak typ wartości tożsamości, a także typ wyniku redukcji. Typ elementu T musi dostarczyć operatorowi T T::operator + (T) , aby zmniejszyć elementy w każdym kawałku. Ten sam operator jest również używany w drugiej fazie.

Drugie przeciążenie wymaga również, aby iterator był value_type taki sam jak typ wartości tożsamości, a także typ wyniku redukcji. Podany operator _Sym_fun binarny jest używany w obu fazach redukcji, a wartość tożsamości jest wartością początkową pierwszej fazy.

W przypadku trzeciego przeciążenia typ wartości tożsamości musi być taki sam jak typ wyniku redukcji, ale iterator value_type może być inny niż oba. Funkcja _Range_fun redukcji zakresu jest używana w pierwszej fazie z wartością tożsamości jako wartością początkową, a funkcja _Sym_reduce_fun binarna jest stosowana do wyników podrzędnych w drugiej fazie.

Parallel_sort

Rozmieszcza elementy w określonym zakresie w kolejność niezstąpiącą lub zgodnie z kryterium porządkowania określonym przez predykat binarny równolegle. Ta funkcja jest semantycznie podobna do std::sort w tym, że jest to sortowanie oparte na porównaniach, niestabilne, w miejscu.

template<typename _Random_iterator>
inline void parallel_sort(
    const _Random_iterator& _Begin,
    const _Random_iterator& _End);

template<typename _Random_iterator,typename _Function>
inline void parallel_sort(
    const _Random_iterator& _Begin,
    const _Random_iterator& _End,
    const _Function& _Func,
    const size_t _Chunk_size = 2048);

Parametry

_Random_iterator
Typ iteratora zakresu danych wejściowych.

_Funkcja
Typ elementu functor porównania binarnego.

_Rozpocząć
Iterator dostępu losowego odnoszący się do pozycji pierwszego elementu w zakresie do sortowania.

_Końcu
Iterator dostępu losowego odnoszący się do pozycji jednej obok ostatniego elementu w zakresie, który ma zostać posortowany.

_Func
Obiekt funkcji predykatu zdefiniowanego przez użytkownika, który definiuje kryterium porównania, które ma być spełnione przez kolejne elementy w kolejności. Predykat binarny przyjmuje dwa argumenty i zwraca, true gdy jest spełniony, a false gdy nie jest spełniony. Ta funkcja komparatora musi nakładać ścisłe słabe kolejność na pary elementów z sekwencji.

_Chunk_size
Minimalny rozmiar fragmentu, który zostanie podzielony na dwa na potrzeby wykonywania równoległego.

Uwagi

Pierwsze przeciążenie używa binarnego komparatora std::less.

Drugi przeciążony używa dostarczonego komparatora binarnego, który powinien mieć podpis bool _Func(T, T) , gdzie T jest typem elementów w zakresie wejściowym.

Algorytm dzieli zakres danych wejściowych na dwa fragmenty, a następnie dzieli każdy fragment na dwa fragmenty podrzędne w celu równoległego wykonywania. Opcjonalny argument _Chunk_size może służyć do wskazywania algorytmowi, który powinien obsługiwać fragmenty rozmiaru <_Chunk_size szeregowego.

Parallel_transform

Stosuje określony obiekt funkcji do każdego elementu w zakresie źródłowym lub do pary elementów z dwóch zakresów źródłowych i kopiuje zwracane wartości obiektu funkcji do zakresu docelowego równolegle. Ta funkcja jest semantycznie równoważna funkcji .std::transform

template <typename _Input_iterator1,
    typename _Output_iterator,
    typename _Unary_operator>
_Output_iterator parallel_transform(
    _Input_iterator1 first1,
    _Input_iterator1 last1,
    _Output_iterator _Result,
    const _Unary_operator& _Unary_op,
    const auto_partitioner& _Part = auto_partitioner());

template <typename _Input_iterator1,
    typename _Output_iterator,
    typename _Unary_operator>
_Output_iterator parallel_transform(
    _Input_iterator1 first1,
    _Input_iterator1 last1,
    _Output_iterator _Result,
    const _Unary_operator& _Unary_op,
    const static_partitioner& _Part);

template <typename _Input_iterator1,
    typename _Output_iterator,
    typename _Unary_operator>
_Output_iterator parallel_transform(
    _Input_iterator1 first1,
    _Input_iterator1 last1,
    _Output_iterator _Result,
    const _Unary_operator& _Unary_op,
    const simple_partitioner& _Part);

template <typename _Input_iterator1,
    typename _Output_iterator,
    typename _Unary_operator>
_Output_iterator parallel_transform(
    _Input_iterator1 first1,
    _Input_iterator1 last1,
    _Output_iterator _Result,
    const _Unary_operator& _Unary_op,
    affinity_partitioner& _Part);

template <typename _Input_iterator1,
    typename _Input_iterator2,
    typename _Output_iterator,
    typename _Binary_operator,
    typename _Partitioner>
_Output_iterator parallel_transform(
    _Input_iterator1 first1,
    _Input_iterator1 last1,
    _Input_iterator2
first2,
    _Output_iterator _Result,
    const _Binary_operator& _Binary_op,
    _Partitioner&& _Part);

template <typename _Input_iterator1,
    typename _Input_iterator2,
    typename _Output_iterator,
    typename _Binary_operator>
_Output_iterator parallel_transform(
    _Input_iterator1 first1,
    _Input_iterator1 last1,
    _Input_iterator2
first2,
    _Output_iterator _Result,
    const _Binary_operator& _Binary_op);

Parametry

_Input_iterator1
Typ pierwszego lub tylko iteratora wejściowego.

_Output_iterator
Typ iteratora wyjściowego.

_Unary_operator
Typ jednoargumentowego functora do wykonania dla każdego elementu w zakresie danych wejściowych.

_Input_iterator2
Typ drugiego iteratora wejściowego.

_Binary_operator
Typ binarnego functora wykonywanego parowo na elementach z dwóch zakresów źródłowych.

_Partycjonowania
first1
Iterator wejściowy odnoszący się do pozycji pierwszego elementu w pierwszym lub jedynym zakresie źródłowym, który ma być obsługiwany.

last1
Iterator wejściowy odnoszący się do pozycji jednej obok ostatniego elementu w pierwszym lub tylko zakresie źródłowym, który ma być obsługiwany.

_Wynik
Iterator danych wyjściowych odnoszący się do pozycji pierwszego elementu w zakresie docelowym.

_Unary_op
Obiekt funkcji jednoargumentowej zdefiniowany przez użytkownika, który jest stosowany do każdego elementu w zakresie źródłowym.

_Części
Odwołanie do obiektu partycjonatora. Argument może być jednym z constauto_partitioner&,const static_partitioner&,const simple_partitioner& lub affinity_partitioner& Jeśli jest używany obiekt affinity_partitioner, odwołanie musi być odwołaniem innym niż const l-value, aby algorytm mógł przechowywać stan dla przyszłych pętli do ponownego użycia.

first2
Iterator wejściowy odnoszący się do pozycji pierwszego elementu w drugim zakresie źródłowym do działania.

_Binary_op
Obiekt funkcji binarnej zdefiniowanej przez użytkownika, który jest stosowany parowo w kolejności przesyłania dalej do dwóch zakresów źródłowych.

Wartość zwracana

Iterator danych wyjściowych odnoszący się do pozycji jednej obok ostatniego elementu w zakresie docelowym, który odbiera elementy wyjściowe przekształcone przez obiekt funkcji.

Uwagi

auto_partitioner będą używane dla przeciążeń bez jawnego argumentu partycjonatora.

W przypadku iteratorów, które nie obsługują dostępu losowego, obsługiwane są tylko auto_partitioner .

Przeciążenia, które przyjmują argument _Unary_op przekształcają zakres danych wejściowych w zakres danych wyjściowych, stosując jednoargumentowy functor do każdego elementu w zakresie danych wejściowych. _Unary_op musi obsługiwać operator wywołania funkcji z podpisem operator()(T) , gdzie T jest typem wartości iterated zakresu.

Przeciążenia, które przyjmują argument _Binary_op przekształcają dwa zakresy danych wejściowych w zakres danych wyjściowych, stosując element binarny functor do jednego elementu z pierwszego zakresu danych wejściowych i jeden element z drugiego zakresu danych wejściowych. _Binary_opmusi obsługiwać operator wywołania funkcji z podpisemoperator()(T, U), gdzie TU , są typami wartości dwóch iteratorów wejściowych.

Aby uzyskać więcej informacji, zobacz Parallel Algorithms (Algorytmy równoległe).

Otrzymywać

Ogólna implementacja odbierania, umożliwiając kontekstowi oczekiwanie na dane z dokładnie jednego źródła i filtrowanie akceptowanych wartości.

template <class T>
T receive(
    _Inout_ ISource<T>* _Src,
    unsigned int _Timeout = COOPERATIVE_TIMEOUT_INFINITE);

template <class T>
T receive(
    _Inout_ ISource<T>* _Src,
    typename ITarget<T>::filter_method const& _Filter_proc,
    unsigned int _Timeout = COOPERATIVE_TIMEOUT_INFINITE);

template <class T>
T receive(
    ISource<T>& _Src,
    unsigned int _Timeout = COOPERATIVE_TIMEOUT_INFINITE);

template <class T>
T receive(
    ISource<T>& _Src,
    typename ITarget<T>::filter_method const& _Filter_proc,
    unsigned int _Timeout = COOPERATIVE_TIMEOUT_INFINITE);

Parametry

T
Typ ładunku.

_Src
Wskaźnik lub odwołanie do źródła, z którego oczekuje się danych.

_Limit czasu
Maksymalny czas, dla którego metoda powinna być dla danych w milisekundach.

_Filter_proc
Funkcja filter, która określa, czy komunikaty powinny być akceptowane.

Wartość zwracana

Wartość ze źródła typu ładunku.

Uwagi

Jeśli parametr _Timeout ma wartość inną niż stała COOPERATIVE_TIMEOUT_INFINITE, wyjątek operation_timed_out jest zgłaszany, jeśli określony czas wygaśnie przed odebraniem komunikatu. Jeśli potrzebujesz limitu czasu o zerowej długości, należy użyć funkcji try_receive , w przeciwieństwie do wywołania receive z limitem czasu 0 (zero), ponieważ jest wydajniejszy i nie zgłasza wyjątków dla limitów czasu.

Aby uzyskać więcej informacji, zobacz Funkcje przekazywania komunikatów.

run_with_cancellation_token

Wykonuje obiekt funkcji natychmiast i synchronicznie w kontekście danego tokenu anulowania.

template<typename _Function>
void run_with_cancellation_token(
    const _Function& _Func,
    cancellation_token _Ct);

Parametry

_Funkcja
Typ obiektu funkcji, który zostanie wywołany.

_Func
Obiekt funkcji, który zostanie wykonany. Ten obiekt musi obsługiwać operator wywołania funkcji z podpisem void(void).

_Ct
Token anulowania, który będzie kontrolować niejawne anulowanie obiektu funkcji. Użyj polecenia cancellation_token::none() , jeśli chcesz, aby funkcja była wykonywana bez możliwości niejawnego anulowania z nadrzędnej grupy zadań, która jest anulowana.

Uwagi

Wszelkie punkty przerwania w obiekcie funkcji zostaną wyzwolone po anulowaniu cancellation_token . Jawny token będzie izolować ten _Func token _Ct od anulowania nadrzędnego, jeśli element nadrzędny ma inny token lub żaden token.

Wyślij

Synchroniczna operacja wysyłania, która czeka do momentu zaakceptowania lub odrzucenia komunikatu przez element docelowy.

template <class T>
bool send(_Inout_ ITarget<T>* _Trg, const T& _Data);

template <class T>
bool send(ITarget<T>& _Trg, const T& _Data);

Parametry

T
Typ ładunku.

_Trg
Wskaźnik lub odwołanie do miejsca docelowego, do którego są wysyłane dane.

_Danych
Odwołanie do danych do wysłania.

Wartość zwracana

true jeśli wiadomość została zaakceptowana, false w przeciwnym razie.

Uwagi

Aby uzyskać więcej informacji, zobacz Funkcje przekazywania komunikatów.

set_ambient_scheduler

inline void set_ambient_scheduler(std::shared_ptr<::Concurrency::scheduler_interface> _Scheduler);

Parametry

_Harmonogram
Harmonogram otoczenia do ustawienia.

set_task_execution_resources

Ogranicza zasoby wykonywania używane przez wewnętrzne wątki procesu roboczego środowiska uruchomieniowego współbieżności do określonego zestawu koligacji.

Ta metoda jest prawidłowa do wywołania tylko przed utworzeniem usługi Resource Manager lub między dwoma okresami istnienia usługi Resource Manager. Może być wywoływany wiele razy, o ile usługa Resource Manager nie istnieje w momencie wywołania. Po ustawieniu limitu koligacji pozostaje ona w mocy do następnego prawidłowego set_task_execution_resources wywołania metody.

Podana maska koligacji nie musi być podzbiorem maski koligacji procesu. Koligacja procesu zostanie zaktualizowana w razie potrzeby.

void __cdecl set_task_execution_resources(
    DWORD_PTR _ProcessAffinityMask);

void __cdecl set_task_execution_resources(
    unsigned short count,
    PGROUP_AFFINITY _PGroupAffinity);

Parametry

_ProcessAffinityMask
Maska koligacji, do którego mają być ograniczone wątki procesu roboczego współbieżności. Użyj tej metody w systemie z więcej niż 64 wątkami sprzętowymi tylko wtedy, gdy chcesz ograniczyć środowisko uruchomieniowe współbieżności do podzestawu bieżącej grupy procesorów. Ogólnie rzecz biorąc, należy użyć wersji metody, która akceptuje tablicę koligacji grup jako parametr, aby ograniczyć koligację na maszynach z większymi niż 64 wątkami sprzętowymi.

count
Liczba GROUP_AFFINITY wpisów w tablicy określonej przez parametr _PGroupAffinity.

_PGroupAffinity
Tablica GROUP_AFFINITY wpisów.

Uwagi

Metoda zgłosi wyjątek invalid_operation , jeśli usługa Resource Manager jest obecna w momencie jego wywołania, a wyjątek invalid_argument , jeśli koligacja określona powoduje pusty zestaw zasobów.

Wersja metody, która przyjmuje tablicę koligacji grup jako parametr, powinna być używana tylko w systemach operacyjnych z systemem Windows 7 lub nowszym. W przeciwnym razie jest zgłaszany wyjątek invalid_operation.

Programowe modyfikowanie koligacji procesu po wywołaniu tej metody nie spowoduje ponownej oceny koligacji przez usługę Resource Manager, do których jest ograniczona. W związku z tym przed wywołaniem tej metody należy wprowadzić wszystkie zmiany koligacji procesu.

swap

Wymienia elementy dwóch concurrent_vector obiektów.

template<typename T, class _Ax>
inline void swap(
    concurrent_vector<T, _Ax>& _A,
    concurrent_vector<T, _Ax>& _B);

Parametry

T
Typ danych elementów przechowywanych w wektorach współbieżnych.

_Ax
Typ alokatora wektorów współbieżnych.

_A
Wektor współbieżny, którego elementy mają być wymieniane z elementami współbieżnymi wektora _B.

_B
Wektor współbieżny dostarczający elementy do zamiany lub wektor, którego elementy mają być wymieniane z elementami współbieżnych wektorów _A.

Uwagi

Funkcja szablonu to algorytm wyspecjalizowany w klasie concurrent_vector kontenera w celu wykonania funkcji _Askładowej . concurrent_vector::swap( _B). Są to wystąpienia częściowego porządkowania szablonów funkcji przez kompilator. Gdy funkcje szablonu są przeciążone w taki sposób, że dopasowanie szablonu z wywołaniem funkcji nie jest unikatowe, kompilator wybierze najbardziej wyspecjalizowaną wersję funkcji szablonu. Ogólna wersja funkcji szablonu , template <class T> void swap(T&, T&)w klasie algorytmu działa przez przypisanie i jest powolną operacją. Wyspecjalizowana wersja w każdym kontenerze jest znacznie szybsza, ponieważ może współpracować z wewnętrzną reprezentacją klasy kontenera.

Ta metoda nie jest bezpieczna współbieżności. Należy upewnić się, że żadne inne wątki nie wykonują operacji na jednym z wektorów współbieżnych podczas wywoływania tej metody.

task_from_exception

template<typename _TaskType, typename _ExType>
task<_TaskType> task_from_exception(
    _ExType _Exception,
    const task_options& _TaskOptions = task_options());

Parametry

_Tasktype

_ExType

_Wyjątek

_TaskOptions

Wartość zwracana

task_from_result

template<typename T>
task<T> task_from_result(
    T _Param,
    const task_options& _TaskOptions = task_options());

inline task<bool> task_from_result(ool _Param);

inline task<void> task_from_result(
    const task_options& _TaskOptions = task_options());

Parametry

T

_Param

_TaskOptions

Wartość zwracana

Trace_agents_register_name

Kojarzy daną nazwę z blokiem komunikatów lub agentem w śladzie ETW.

template <class T>
void Trace_agents_register_name(
    _Inout_ T* _PObject,
    _In_z_ const wchar_t* _Name);

Parametry

T
Typ obiektu. Zazwyczaj jest to blok komunikatów lub agent.

_Pobject
Wskaźnik do bloku komunikatów lub agenta, który jest nazwany w śladzie.

_Nazwa
Nazwa danego obiektu.

try_receive

Ogólna implementacja try-receive, umożliwiając kontekstowi wyszukiwanie danych z dokładnie jednego źródła i filtrowanie akceptowanych wartości. Jeśli dane nie są gotowe, metoda zwróci falsewartość .

template <class T>
bool try_receive(_Inout_ ISource<T>* _Src, T& _value);

template <class T>
bool try_receive(
    _Inout_ ISource<T>* _Src,
    T& _value,
    typename ITarget<T>::filter_method const& _Filter_proc);

template <class T>
bool try_receive(ISource<T>& _Src, T& _value);

template <class T>
bool try_receive(
    ISource<T>& _Src,
    T& _value,
    typename ITarget<T>::filter_method const& _Filter_proc);

Parametry

T
Typ ładunku

_Src
Wskaźnik lub odwołanie do źródła, z którego oczekuje się danych.

_Wartość
Odwołanie do lokalizacji, w której zostanie umieszczony wynik.

_Filter_proc
Funkcja filter, która określa, czy komunikaty powinny być akceptowane.

Wartość zwracana

Wartość wskazująca bool , czy ładunek został umieszczony w pliku _value.

Uwagi

Aby uzyskać więcej informacji, zobacz Funkcje przekazywania komunikatów.

wait

Wstrzymuje bieżący kontekst przez określony czas.

void __cdecl wait(unsigned int _Milliseconds);

Parametry

_Milisekund
Liczba milisekund, dla których należy wstrzymać bieżący kontekst. _Milliseconds Jeśli parametr jest ustawiony na wartość 0, bieżący kontekst powinien zwrócić wykonanie do innych kontekstów możliwych do uruchomienia przed kontynuowaniem.

Uwagi

Jeśli ta metoda jest wywoływana w kontekście harmonogramu środowiska uruchomieniowego współbieżności, harmonogram znajdzie inny kontekst do uruchomienia w zasobie bazowym. Ponieważ harmonogram jest w naturze współpracy, ten kontekst nie może wznowić dokładnie po określonej liczbie milisekund. Jeśli harmonogram jest zajęty wykonywaniem innych zadań, które nie dają współpracy z harmonogramem, okres oczekiwania może być nieokreślony.

When_all

Tworzy zadanie, które zostanie ukończone pomyślnie po pomyślnym zakończeniu wszystkich zadań dostarczonych jako argumenty.

template <typename _Iterator>
auto when_all(
    _Iterator _Begin,
    _Iterator _End,
    const task_options& _TaskOptions = task_options()) ->
    decltype (details::_WhenAllImpl<typename std::iterator_traits<_Iterator>::value_type::result_type,
    _Iterator>::_Perform(_TaskOptions, _Begin,  _End));

Parametry

_Sterująca
Typ iteratora wejściowego.

_Rozpocząć
Pozycja pierwszego elementu w zakresie elementów, które mają zostać połączone w wynikowe zadanie.

_Końcu
Położenie pierwszego elementu poza zakresem elementów, które mają zostać połączone w wynikowe zadanie.

_TaskOptions
Obiekt task_options.

Wartość zwracana

Zadanie, które zakończy się pomyślnie po pomyślnym zakończeniu wszystkich zadań wejściowych. Jeśli zadania wejściowe są typu T, dane wyjściowe tej funkcji będą mieć task<std::vector<T>>wartość . Jeśli zadania wejściowe są typuvoid, zadanie wyjściowe będzie również .task<void>

Uwagi

when_all jest funkcją nieblokającą, która generuje task element w wyniku. W przeciwieństwie do task::wait, można bezpiecznie wywołać tę funkcję w aplikacji platformy UWP w wątku ASTA (Application STA).

Jeśli jedno z zadań zostanie anulowane lub zgłosi wyjątek, zwrócone zadanie zostanie ukończone wcześnie, w stanie anulowanym, a wyjątek, jeśli wystąpi, zostanie zgłoszony, jeśli wywołasz zadanie::get lub task::wait w tym zadaniu.

Aby uzyskać więcej informacji, zobacz Równoległość zadań.

When_any

Tworzy zadanie, które zostanie ukończone pomyślnie po pomyślnym zakończeniu któregokolwiek z zadań dostarczonych jako argumenty.

template<typename _Iterator>
auto when_any(
    _Iterator _Begin,
    _Iterator _End,
    const task_options& _TaskOptions = task_options())
    -> decltype (
        details::_WhenAnyImpl<
            typename std::iterator_traits<_Iterator>::value_type::result_type,
            _Iterator>::_Perform(_TaskOptions, _Begin, _End));

template<typename _Iterator>
auto when_any(
    _Iterator _Begin,
    _Iterator _End,
    cancellation_token _CancellationToken)
       -> decltype (
           details::_WhenAnyImpl<
               typename std::iterator_traits<_Iterator>::value_type::result_type,
               _Iterator>::_Perform(_CancellationToken._GetImplValue(), _Begin, _End));

Parametry

_Sterująca
Typ iteratora wejściowego.

_Rozpocząć
Pozycja pierwszego elementu w zakresie elementów, które mają zostać połączone w wynikowe zadanie.

_Końcu
Położenie pierwszego elementu poza zakresem elementów, które mają zostać połączone w wynikowe zadanie.

_TaskOptions
_Cancellationtoken
Token anulowania, który kontroluje anulowanie zwróconego zadania. Jeśli nie podasz tokenu anulowania, wynikowe zadanie otrzyma token anulowania zadania, który spowoduje jego ukończenie.

Wartość zwracana

Zadanie, które zakończy się pomyślnie po pomyślnym zakończeniu któregokolwiek z zadań wejściowych. Jeśli zadania wejściowe są typu T, dane wyjściowe tej funkcji to task<std::pair<T, size_t>>>, gdzie pierwszym elementem pary jest wynik ukończenia zadania, a drugim elementem jest indeks zadania, które zostało zakończone. Jeśli zadania wejściowe są typu void dane wyjściowe to task<size_t>, gdzie wynikiem jest indeks zadania ukończenia.

Uwagi

when_any jest funkcją nieblokającą, która generuje task element w wyniku. W przeciwieństwie do task::wait, można bezpiecznie wywołać tę funkcję w aplikacji platformy UWP w wątku ASTA (Application STA).

Aby uzyskać więcej informacji, zobacz Równoległość zadań.

Zobacz też

Przestrzeń nazw współbieżności