Fungsi namespace konkurensi

Alokasi

Mengalokasikan blok memori ukuran yang ditentukan dari Concurrency Runtime Caching Suballocator.

void* __cdecl Alloc(size_t _NumBytes);

Parameter

_NumBytes
Jumlah byte memori yang akan dialokasikan.

Tampilkan Nilai

Penunjuk ke memori yang baru dialokasikan.

Keterangan

Untuk informasi selengkapnya tentang skenario mana dalam aplikasi Anda yang dapat memperoleh manfaat dari penggunaan Caching Suballocator, lihat Penjadwal Tugas.

asend

Operasi pengiriman asinkron, yang menjadwalkan tugas untuk menyebarkan data ke blok target.

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

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

Parameter

T
Jenis data yang akan dikirim.

_Trg
Penunjuk atau referensi ke target tempat data dikirim.

_Data
Referensi ke data yang akan dikirim.

Tampilkan Nilai

true jika pesan diterima sebelum metode dikembalikan, false jika tidak.

Keterangan

Untuk informasi selengkapnya, lihat Fungsi Passing Pesan.

cancel_current_task

Membatalkan tugas yang sedang dijalankan. Fungsi ini dapat dipanggil dari dalam isi tugas untuk membatalkan eksekusi tugas dan menyebabkannya memasuki status canceled .

Ini bukan skenario yang didukung untuk memanggil fungsi ini jika Anda tidak berada dalam isi task. Melakukannya akan mengakibatkan perilaku yang tidak terdefinisi seperti crash atau tidak responsif dalam aplikasi Anda.

inline __declspec(noreturn) void __cdecl cancel_current_task();

hapus

Menghapus antrean bersamaan, menghancurkan elemen yang saat ini diantrekan. Metode ini tidak aman konkurensi.

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

Parameter

T

_Ax

create_async

Membuat konstruksi asinkron Windows Runtime berdasarkan lambda yang disediakan pengguna atau objek fungsi. Jenis create_async pengembalian adalah salah satu dari IAsyncAction^, , IAsyncActionWithProgress<TProgress>^IAsyncOperation<TResult>^, atau IAsyncOperationWithProgress<TResult, TProgress>^ berdasarkan tanda tangan lambda yang diteruskan ke metode .

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

Parameter

_Fungsi
Jenis.

_Func
Objek lambda atau fungsi untuk membuat konstruksi asinkron Windows Runtime.

Tampilkan Nilai

Konstruksi asinkron yang diwakili oleh IAsyncAction^, IAsyncActionWithProgress TProgress<>^, IAsyncOperation<TResult>^, atau IAsyncOperationWithProgress<TResult, TProgress>^. Antarmuka yang dikembalikan tergantung pada tanda tangan lambda yang diteruskan ke fungsi .

Keterangan

Jenis pengembalian lambda menentukan apakah konstruksi adalah tindakan atau operasi.

Lambda yang kembali batal menyebabkan pembuatan tindakan. Lambda yang mengembalikan hasil jenis TResult menyebabkan pembuatan operasi TResult.

Lambda juga dapat mengembalikan task<TResult> yang merangkum pekerjaan ainkron dalam dirinya sendiri atau merupakan kelanjutan dari rantai tugas yang mewakili pekerjaan asinkron. Dalam hal ini, lambda itu sendiri dijalankan sebaris, karena tugas adalah tugas yang dijalankan secara asinkron, dan jenis pengembalian lambda tidak dibungkus untuk menghasilkan konstruksi asinkron yang dikembalikan oleh create_async. Ini menyiratkan bahwa lambda yang mengembalikan kekosongan> tugas<akan menyebabkan pembuatan tindakan, dan lambda yang mengembalikan tugas<TResult> akan menyebabkan pembuatan operasi TResult.

Lambda mungkin mengambil argumen nol, satu atau dua. Argumen yang valid adalah progress_reporter<TProgress> dan cancellation_token, dalam urutan tersebut jika keduanya digunakan. Lambda tanpa argumen menyebabkan pembuatan konstruksi asinkron tanpa kemampuan untuk pelaporan kemajuan. Lambda yang mengambil progress_reporter<TProgress> akan menyebabkan create_async mengembalikan konstruksi asinkron yang melaporkan kemajuan jenis TProgress setiap kali report metode objek progress_reporter dipanggil. Lambda yang mengambil cancellation_token dapat menggunakan token tersebut untuk memeriksa pembatalan, atau meneruskannya ke tugas yang dibuatnya sehingga pembatalan konstruksi asinkron menyebabkan pembatalan tugas tersebut.

Jika isi lambda atau objek fungsi mengembalikan hasil (dan bukan tugas<TResult>), lamdba akan dijalankan secara asinkron dalam proses MTA dalam konteks tugas yang dibuat runtime secara implisit untuk itu. Metode ini IAsyncInfo::Cancel akan menyebabkan pembatalan tugas implisit.

Jika isi lambda mengembalikan tugas, lamba menjalankan sebaris, dan dengan mendeklarasikan lambda untuk mengambil argumen jenis cancellation_token , Anda dapat memicu pembatalan tugas apa pun yang Anda buat dalam lambda dengan meneruskan token tersebut saat Anda membuatnya. Anda juga dapat menggunakan register_callback metode pada token untuk menyebabkan Runtime memanggil panggilan balik saat Anda memanggil IAsyncInfo::Cancel operasi asinkron atau tindakan yang dihasilkan.

Fungsi ini hanya tersedia untuk aplikasi Windows Runtime.

CreateResourceManager

Mengembalikan antarmuka yang mewakili instans singleton resource Manager Concurrency Runtime. Resource Manager bertanggung jawab untuk menetapkan sumber daya kepada penjadwal yang ingin bekerja sama satu sama lain.

IResourceManager* __cdecl CreateResourceManager();

Tampilkan Nilai

Antarmuka IResourceManager .

Keterangan

Beberapa panggilan berikutnya ke metode ini akan mengembalikan instans Resource Manager yang sama. Setiap panggilan ke metode menambahkan jumlah referensi pada Resource Manager, dan harus dicocokkan dengan panggilan ke metode IResourceManager::Release ketika penjadwal Anda selesai berkomunikasi dengan Resource Manager.

unsupported_os dilemparkan jika sistem operasi tidak didukung oleh Concurrency Runtime.

create_task

Membuat objek tugas PPL. create_task dapat digunakan di mana saja Anda akan menggunakan konstruktor tugas. Ini disediakan terutama untuk kenyamanan, karena memungkinkan penggunaan auto kata kunci saat membuat tugas.

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);

Parameter

T
Jenis parameter tempat tugas akan dibangun.

_ReturnType
Jenis.

_Param
Parameter tempat tugas akan dibangun. Ini bisa berupa objek lambda atau fungsi, task_completion_event objek, objek yang berbeda task , atau antarmuka Windows::Foundation::IAsyncInfo jika Anda menggunakan tugas di aplikasi UWP Anda.

_TaskOptions
Opsi tugas.

_Tugas
Tugas yang akan dibuat.

Tampilkan Nilai

Tugas baru jenis T, yang disimpulkan dari _Param.

Keterangan

Kelebihan beban pertama berperilaku seperti konstruktor tugas yang mengambil satu parameter.

Kelebihan beban kedua mengaitkan token pembatalan yang disediakan dengan tugas yang baru dibuat. Jika Anda menggunakan kelebihan beban ini, Anda tidak diizinkan untuk meneruskan objek yang berbeda task sebagai parameter pertama.

Jenis tugas yang dikembalikan disimpulkan dari parameter pertama ke fungsi. Jika _Param adalah , , task<T>atau funktor yang mengembalikan jenis T atau task<T>, jenis tugas yang dibuat adalah task<T>task_completion_event<T>.

Dalam aplikasi UWP, jika _Param berjenis Windows::Foundation::IAsyncOperation<T>^ atau Windows::Foundation::IAsyncOperationWithProgress<T,P>^, atau funktor yang mengembalikan salah satu jenis tersebut, tugas yang dibuat akan berjenis task<T>. Jika _Param berjenis Windows::Foundation::IAsyncAction^ atau Windows::Foundation::IAsyncActionWithProgress<P>^, atau funktor yang mengembalikan salah satu jenis tersebut, tugas yang dibuat akan memiliki jenis task<void>.

DisableTracing

Menonaktifkan pelacakan di Runtime Konkurensi. Fungsi ini tidak digunakan lagi karena pelacakan ETW tidak terdaftar secara default.

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

Tampilkan Nilai

Jika pelacakan dinonaktifkan dengan benar, S_OK dikembalikan. Jika pelacakan sebelumnya tidak dimulai, E_NOT_STARTED dikembalikan

EnableTracing

Mengaktifkan pelacakan di Runtime Konkurensi. Fungsi ini tidak digunakan lagi karena pelacakan ETW sekarang aktif secara default.

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

Tampilkan Nilai

Jika pelacakan dimulai dengan benar, S_OK dikembalikan; jika tidak, E_NOT_STARTED dikembalikan.

Gratis

Merilis blok memori yang sebelumnya dialokasikan oleh Alloc metode ke Concurrency Runtime Caching Suballocator.

void __cdecl Free(_Pre_maybenull_ _Post_invalid_ void* _PAllocation);

Parameter

_PAllocation
Pointer ke memori yang sebelumnya dialokasikan oleh Alloc metode yang akan dibebaskan. Jika parameter _PAllocation diatur ke nilai NULL, metode ini akan mengabaikannya dan segera kembali.

Keterangan

Untuk informasi selengkapnya tentang skenario mana dalam aplikasi Anda yang dapat memperoleh manfaat dari penggunaan Caching Suballocator, lihat Penjadwal Tugas.

get_ambient_scheduler

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

Tampilkan Nilai

GetExecutionContextId

Mengembalikan pengidentifikasi unik yang dapat ditetapkan ke konteks eksekusi yang mengimplementasikan IExecutionContext antarmuka.

unsigned int __cdecl GetExecutionContextId();

Tampilkan Nilai

Pengidentifikasi unik untuk konteks eksekusi.

Keterangan

Gunakan metode ini untuk mendapatkan pengidentifikasi untuk konteks eksekusi Anda sebelum Anda meneruskan IExecutionContext antarmuka sebagai parameter ke salah satu metode yang ditawarkan oleh Resource Manager.

GetOSVersion

Mengembalikan versi sistem operasi.

IResourceManager::OSVersion __cdecl GetOSVersion();

Tampilkan Nilai

Nilai enumerasi yang mewakili sistem operasi.

Keterangan

unsupported_os dilemparkan jika sistem operasi tidak didukung oleh Concurrency Runtime.

GetProcessorCount

Mengembalikan jumlah utas perangkat keras pada sistem yang mendasar.

unsigned int __cdecl GetProcessorCount();

Tampilkan Nilai

Jumlah utas perangkat keras.

Keterangan

unsupported_os dilemparkan jika sistem operasi tidak didukung oleh Concurrency Runtime.

GetProcessorNodeCount

Mengembalikan jumlah simpul NUMA atau paket prosesor pada sistem yang mendasar.

unsigned int __cdecl GetProcessorNodeCount();

Tampilkan Nilai

Jumlah node NUMA atau paket prosesor.

Keterangan

Jika sistem berisi lebih banyak simpul NUMA daripada paket prosesor, jumlah simpul NUMA dikembalikan, jika tidak, jumlah paket prosesor dikembalikan.

unsupported_os dilemparkan jika sistem operasi tidak didukung oleh Concurrency Runtime.

GetSchedulerId

Mengembalikan pengidentifikasi unik yang dapat ditetapkan ke penjadwal yang mengimplementasikan IScheduler antarmuka.

unsigned int __cdecl GetSchedulerId();

Tampilkan Nilai

Pengidentifikasi unik untuk penjadwal.

Keterangan

Gunakan metode ini untuk mendapatkan pengidentifikasi untuk penjadwal Anda sebelum Anda meneruskan IScheduler antarmuka sebagai parameter ke salah satu metode yang ditawarkan oleh 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);

Parameter

T

_Ax

_I

first

last

interruption_point

Membuat titik gangguan untuk pembatalan. Jika pembatalan sedang berlangsung dalam konteks di mana fungsi ini dipanggil, ini akan melemparkan pengecualian internal yang membatalkan eksekusi pekerjaan paralel yang sedang dijalankan. Jika pembatalan tidak sedang berlangsung, fungsi tidak melakukan apa-apa.

inline void interruption_point();

Keterangan

Anda tidak boleh menangkap pengecualian pembatalan internal yang dilemparkan interruption_point() oleh fungsi . Pengecualian akan ditangkap dan ditangani oleh runtime, dan menangkapnya dapat menyebabkan program Anda berperilaku tidak normal.

is_current_task_group_canceling

Mengembalikan indikasi apakah grup tugas yang saat ini menjalankan sebaris pada konteks saat ini berada di tengah-tengah pembatalan aktif (atau tidak lama lagi). Perhatikan bahwa jika tidak ada grup tugas yang saat ini menjalankan sebaris pada konteks saat ini, false akan dikembalikan.

bool __cdecl is_current_task_group_canceling();

Tampilkan Nilai

true jika grup tugas yang sedang dijalankan sedang dibatalkan, false jika tidak.

Keterangan

Untuk informasi selengkapnya, lihat Pembatalan.

make_choice

Membuat choice blok olahpesan dari sumber input opsional Scheduler atau ScheduleGroup dan dua atau lebih.

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);

Parameter

T1
Jenis blok pesan dari sumber pertama.

T2
Jenis blok pesan dari sumber kedua.

_PScheduler
Objek Scheduler tempat tugas penyebaran untuk choice blok olahpesan dijadwalkan.

_Item1
Sumber pertama.

_Item2
Sumber kedua.

_Item
Sumber tambahan.

_PScheduleGroup
Objek ScheduleGroup tempat tugas penyebaran untuk choice blok olahpesan dijadwalkan. Objek Scheduler yang digunakan tersirat oleh grup jadwal.

Tampilkan Nilai

choice Blok pesan dengan dua atau beberapa sumber input.

make_greedy_join

Membuat greedy multitype_join blok olahpesan dari sumber input opsional Scheduler atau ScheduleGroup dan dua atau lebih.

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);

Parameter

T1
Jenis blok pesan dari sumber pertama.

T2
Jenis blok pesan dari sumber kedua.

_PScheduler
Objek Scheduler tempat tugas penyebaran untuk multitype_join blok olahpesan dijadwalkan.

_Item1
Sumber pertama.

_Item2
Sumber kedua.

_Item
Sumber tambahan.

_PScheduleGroup
Objek ScheduleGroup tempat tugas penyebaran untuk multitype_join blok olahpesan dijadwalkan. Objek Scheduler yang digunakan tersirat oleh grup jadwal.

Tampilkan Nilai

greedy multitype_join Blok pesan dengan dua atau beberapa sumber input.

make_join

Membuat non_greedy multitype_join blok olahpesan dari sumber input opsional Scheduler atau ScheduleGroup dan dua atau lebih.

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);

Parameter

T1
Jenis blok pesan dari sumber pertama.

T2
Jenis blok pesan dari sumber kedua.

_PScheduler
Objek Scheduler tempat tugas penyebaran untuk multitype_join blok olahpesan dijadwalkan.

_Item1
Sumber pertama.

_Item2
Sumber kedua.

_Item
Sumber tambahan.

_PScheduleGroup
Objek ScheduleGroup tempat tugas penyebaran untuk multitype_join blok olahpesan dijadwalkan. Objek Scheduler yang digunakan tersirat oleh grup jadwal.

Tampilkan Nilai

non_greedy multitype_join Blok pesan dengan dua atau beberapa sumber input.

make_task

Metode pabrik untuk membuat task_handle objek.

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

Parameter

_Fungsi
Jenis objek fungsi yang akan dipanggil untuk menjalankan pekerjaan yang diwakili oleh task_handle objek.

_Func
Fungsi yang akan dipanggil untuk menjalankan pekerjaan yang diwakili oleh task_handle objek. Ini mungkin funktor lambda, penunjuk ke fungsi, atau objek apa pun yang mendukung versi operator panggilan fungsi dengan tanda tangan void operator()().

Tampilkan Nilai

Objek task_handle.

Keterangan

Fungsi ini berguna ketika Anda perlu membuat task_handle objek dengan ekspresi lambda, karena memungkinkan Anda untuk membuat objek tanpa mengetahui jenis funktor lambda yang sebenarnya.

parallel_buffered_sort

Mengatur elemen dalam rentang tertentu ke dalam urutan non-turun, atau sesuai dengan kriteria pemesanan yang ditentukan oleh predikat biner, secara paralel. Fungsi ini secara semantik mirip std::sort dengan di mana fungsi ini adalah pengurutan berbasis bandingan, tidak stabil, di tempat kecuali bahwa ia membutuhkan O(n) ruang tambahan, dan memerlukan inisialisasi default untuk elemen yang diurutkan.

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);

Parameter

_Random_iterator
Jenis iterator dari rentang input.

_Pengalokasi
Jenis alokator memori yang kompatibel dengan Pustaka Standar C++.

_Fungsi
Jenis komparator biner.

_Mulai
Iterator akses acak yang mengatasi posisi elemen pertama dalam rentang yang akan diurutkan.

_Akhir
Iterator akses acak yang membahas posisi satu melewati elemen akhir dalam rentang yang akan diurutkan.

_Alloc
Instans alokator memori yang kompatibel dengan Pustaka Standar C++.

_Func
Objek fungsi predikat yang ditentukan pengguna yang menentukan kriteria perbandingan yang harus dipenuhi oleh elemen berturut-turut dalam pengurutan. Predikat biner mengambil dua argumen dan kembali true ketika puas dan false ketika tidak puas. Fungsi komparator ini harus memberlakukan urutan lemah yang ketat pada pasangan elemen dari urutan.

_Chunk_size
Ukuran mimimum dari gugus yang akan dibagi menjadi dua untuk eksekusi paralel.

Keterangan

Semua kelebihan beban memerlukan n * sizeof(T) ruang tambahan, di mana n adalah jumlah elemen yang akan diurutkan, dan T merupakan jenis elemen. Dalam kebanyakan kasus parallel_buffered_sort akan menunjukkan peningkatan performa di atas parallel_sort, dan Anda harus menggunakannya melalui parallel_sort jika Anda memiliki memori yang tersedia.

Jika Anda tidak menyediakan komparator std::less biner digunakan sebagai default, yang memerlukan jenis elemen untuk menyediakan operator operator<().

Jika Anda tidak menyediakan jenis atau instans alokator, alokator std::allocator<T> memori Pustaka Standar C++ digunakan untuk mengalokasikan buffer.

Algoritma membagi rentang input menjadi dua gugus dan secara berturut-turut membagi setiap gugus menjadi dua sub-gugus untuk eksekusi secara paralel. Argumen _Chunk_size opsional dapat digunakan untuk menunjukkan algoritma bahwa argumen tersebut harus menangani potongan ukuran <_Chunk_size secara serial.

parallel_for

parallel_for melakukan iterasi pada berbagai indeks dan menjalankan fungsi yang disediakan pengguna di setiap iterasi, secara paralel.

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);

Parameter

_Index_type
Jenis indeks yang digunakan untuk iterasi.

_Fungsi
Jenis fungsi yang akan dijalankan di setiap iterasi.

_Partitioner
Jenis partisi yang digunakan untuk mempartisi rentang yang disediakan.

first
Indeks pertama yang disertakan dalam iterasi.

last
Indeks satu melewati indeks terakhir yang akan disertakan dalam iterasi.

_Langkah
Nilai yang akan dilangkahi saat melakukan iterasi dari first ke last. Langkahnya harus positif. invalid_argument dilemparkan jika langkahnya kurang dari 1.

_Func
Fungsi yang akan dijalankan di setiap iterasi. Ini mungkin ekspresi lambda, penunjuk fungsi, atau objek apa pun yang mendukung versi operator panggilan fungsi dengan tanda tangan void operator()(_Index_type).

_Bagian
Referensi ke objek partisi. Argumen dapat berupa salah satu auto_partitionerconst&,const static_partitioner&, simple_partitioner&, constatau affinity_partitioner& Jika objek affinity_partitioner digunakan, referensi harus berupa referensi nilai l non-const, sehingga algoritma dapat menyimpan status untuk digunakan kembali perulangan di masa mendatang.

Keterangan

Untuk informasi selengkapnya, lihat Algoritma Paralel.

parallel_for_each

parallel_for_each menerapkan fungsi tertentu ke setiap elemen dalam rentang, secara paralel. Ini secara semantik setara for_each dengan fungsi di std namespace layanan, kecuali bahwa iterasi atas elemen dilakukan secara paralel, dan urutan iterasi tidak ditentukan. Argumen _Func harus mendukung operator panggilan fungsi formulir operator()(T) di mana parameter T adalah jenis item kontainer yang diulang.

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);

Parameter

_Iterator
Jenis iterator yang digunakan untuk melakukan iterasi melalui kontainer.

_Fungsi
Jenis fungsi yang akan diterapkan ke setiap elemen dalam rentang.

_Partitioner
first
Iterator yang membahas posisi elemen pertama yang disertakan dalam iterasi paralel.

last
Iterator yang membahas posisi satu melewati elemen akhir untuk disertakan dalam iterasi paralel.

_Func
Objek fungsi yang ditentukan pengguna yang diterapkan ke setiap elemen dalam rentang.

_Bagian
Referensi ke objek partisi. Argumen dapat berupa salah satu auto_partitionerconst&,const static_partitioner&, simple_partitioner&, constatau affinity_partitioner& Jika objek affinity_partitioner digunakan, referensi harus berupa referensi nilai l non-const, sehingga algoritma dapat menyimpan status untuk digunakan kembali perulangan di masa mendatang.

Keterangan

auto_partitioner akan digunakan untuk kelebihan beban tanpa partisi eksplisit.

Untuk iterator yang tidak mendukung akses acak, hanya auto_partitioner yang didukung.

Untuk informasi selengkapnya, lihat Algoritma Paralel.

parallel_invoke

Menjalankan objek fungsi yang disediakan sebagai parameter secara paralel, dan blok hingga selesai dieksekusi. Setiap objek fungsi bisa berupa ekspresi lambda, penunjuk ke fungsi, atau objek apa pun yang mendukung operator panggilan fungsi dengan tanda tangan 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);

Parameter

_Function1
Jenis objek fungsi pertama yang akan dijalankan secara paralel.

_Function2
Jenis objek fungsi kedua yang akan dijalankan secara paralel.

_Function3
Jenis objek fungsi ketiga yang akan dijalankan secara paralel.

_Function4
Jenis objek fungsi keempat yang akan dijalankan secara paralel.

_Function5
Jenis objek fungsi kelima yang akan dijalankan secara paralel.

_Function6
Jenis objek fungsi keenam yang akan dijalankan secara paralel.

_Function7
Jenis objek fungsi ketujuh yang akan dijalankan secara paralel.

_Function8
Jenis objek fungsi kedelapan yang akan dijalankan secara paralel.

_Function9
Jenis objek fungsi kesembilan yang akan dijalankan secara paralel.

_Function10
Jenis objek fungsi kesepuluh yang akan dijalankan secara paralel.

_Func1
Objek fungsi pertama yang akan dijalankan secara paralel.

_Func2
Objek fungsi kedua yang akan dijalankan secara paralel.

_Func3
Objek fungsi ketiga yang akan dijalankan secara paralel.

_Func4
Objek fungsi keempat yang akan dijalankan secara paralel.

_Func5
Objek fungsi kelima yang akan dijalankan secara paralel.

_Func6
Objek fungsi keenam yang akan dijalankan secara paralel.

_Func7
Objek fungsi ketujuh yang akan dijalankan secara paralel.

_Func8
Objek fungsi kedelapan yang akan dijalankan secara paralel.

_Func9
Objek fungsi kesembilan yang akan dijalankan secara paralel.

_Func10
Objek fungsi kesepuluh yang akan dijalankan secara paralel.

Keterangan

Perhatikan bahwa satu atau beberapa objek fungsi yang disediakan sebagai parameter dapat dijalankan sebaris pada konteks panggilan.

Jika satu atau beberapa objek fungsi diteruskan sebagai parameter ke fungsi ini melemparkan pengecualian, runtime akan memilih satu pengecualian seperti itu dari pemilihannya dan menyebarkannya keluar dari panggilan ke parallel_invoke.

Untuk informasi selengkapnya, lihat Algoritma Paralel.

parallel_radixsort

Mengatur elemen dalam rentang tertentu ke dalam urutan tidak menurun menggunakan algoritma pengurutan radiks. Ini adalah fungsi sortir stabil yang memerlukan fungsi proyeksi yang dapat memproyeksikan elemen untuk diurutkan ke dalam kunci seperti bilangan bulat yang tidak ditandatangani. Inisialisasi default diperlukan untuk elemen yang sedang diurutkan.

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);

Parameter

_Random_iterator
Jenis iterator dari rentang input.

_Pengalokasi
Jenis alokator memori yang kompatibel dengan Pustaka Standar C++.

_Fungsi
Jenis fungsi proyeksi.

_Mulai
Iterator akses acak yang mengatasi posisi elemen pertama dalam rentang yang akan diurutkan.

_Akhir
Iterator akses acak yang membahas posisi satu melewati elemen akhir dalam rentang yang akan diurutkan.

_Alloc
Instans alokator memori yang kompatibel dengan Pustaka Standar C++.

_Proj_func
Objek fungsi proyeksi yang ditentukan pengguna yang mengonversi elemen menjadi nilai integral.

_Chunk_size
Ukuran mimimum dari gugus yang akan dibagi menjadi dua untuk eksekusi paralel.

Keterangan

Semua kelebihan beban memerlukan n * sizeof(T) ruang tambahan, di mana n adalah jumlah elemen yang akan diurutkan, dan T merupakan jenis elemen. Funktor proyeksi unary dengan tanda tangan I _Proj_func(T) diperlukan untuk mengembalikan kunci ketika diberikan elemen, di mana T adalah jenis elemen dan I merupakan jenis seperti bilangan bulat yang tidak ditandatangani.

Jika Anda tidak menyediakan fungsi proyeksi, fungsi proyeksi default yang hanya mengembalikan elemen digunakan untuk jenis integral. Fungsi akan gagal dikompilasi jika elemen bukan jenis integral tanpa adanya fungsi proyeksi.

Jika Anda tidak menyediakan jenis atau instans alokator, alokator std::allocator<T> memori Pustaka Standar C++ digunakan untuk mengalokasikan buffer.

Algoritma membagi rentang input menjadi dua gugus dan secara berturut-turut membagi setiap gugus menjadi dua sub-gugus untuk eksekusi secara paralel. Argumen _Chunk_size opsional dapat digunakan untuk menunjukkan algoritma bahwa argumen tersebut harus menangani potongan ukuran <_Chunk_size secara serial.

parallel_reduce

Menghitung jumlah semua elemen dalam rentang tertentu dengan menghitung jumlah parsial berturut-turut, atau menghitung hasil hasil parsial berturut-turut yang sama diperoleh dari menggunakan operasi biner tertentu selain jumlah, secara paralel. parallel_reduce secara semantik mirip std::accumulatedengan , kecuali bahwa itu mengharuskan operasi biner menjadi asosiatif, dan memerlukan nilai identitas alih-alih nilai awal.

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);

Parameter

_Forward_iterator
Jenis iterator rentang input.

_Sym_reduce_fun
Jenis fungsi pengurangan simetris. Ini harus merupakan jenis fungsi dengan tanda tangan _Reduce_type _Sym_fun(_Reduce_type, _Reduce_type), di mana _Reduce_type sama dengan jenis identitas dan jenis hasil pengurangan. Untuk kelebihan beban ketiga, ini harus konsisten dengan jenis output ._Range_reduce_fun

_Reduce_type
Jenis yang akan dikurangi input, yang dapat berbeda dari jenis elemen input. Nilai pengembalian dan nilai identitas akan memiliki jenis ini.

_Range_reduce_fun
Jenis fungsi pengurangan rentang. Ini harus merupakan jenis fungsi dengan tanda tangan _Reduce_type _Range_fun(_Forward_iterator, _Forward_iterator, _Reduce_type), _Reduce_type sama dengan jenis identitas dan jenis hasil pengurangan.

_Mulai
Iterator input yang menangani elemen pertama dalam rentang yang akan dikurangi.

_Akhir
Iterator input yang menangani elemen yang merupakan salah satu posisi di luar elemen akhir dalam rentang yang akan dikurangi.

_Identitas
Nilai _Identity identitas memiliki jenis yang sama dengan jenis hasil pengurangan dan juga value_type iterator untuk kelebihan beban pertama dan kedua. Untuk kelebihan beban ketiga, nilai identitas harus memiliki jenis yang sama dengan jenis hasil pengurangan, tetapi bisa berbeda dari iterator value_type . Ini harus memiliki nilai yang sesuai sehingga operator _Range_funpengurangan rentang , ketika diterapkan ke rentang satu elemen jenis value_type dan nilai identitas, berperilaku seperti jenis cast nilai dari jenis value_type ke jenis identitas.

_Sym_fun
Fungsi simetris yang akan digunakan pada detik pengurangan. Lihat Keterangan untuk informasi selengkapnya.

_Range_fun
Fungsi yang akan digunakan dalam fase pertama pengurangan. Lihat Keterangan untuk informasi selengkapnya.

Tampilkan Nilai

Hasil pengurangan.

Keterangan

Untuk melakukan pengurangan paralel, fungsi membagi rentang menjadi potongan berdasarkan jumlah pekerja yang tersedia untuk penjadwal yang mendasar. Pengurangan terjadi dalam dua fase, fase pertama melakukan pengurangan dalam setiap gugus, dan fase kedua melakukan pengurangan antara hasil parsial dari setiap gugus.

Kelebihan beban pertama mengharuskan iterator value_type, T, sama dengan jenis nilai identitas serta jenis hasil pengurangan. Jenis elemen T harus menyediakan operator T T::operator + (T) untuk mengurangi elemen di setiap gugus. Operator yang sama juga digunakan pada fase kedua.

Kelebihan beban kedua juga mengharuskan iterator value_type sama dengan jenis nilai identitas serta jenis hasil pengurangan. Operator _Sym_fun biner yang disediakan digunakan dalam kedua fase pengurangan, dengan nilai identitas sebagai nilai awal untuk fase pertama.

Untuk kelebihan beban ketiga, jenis nilai identitas harus sama dengan jenis hasil pengurangan, tetapi iterator value_type mungkin berbeda dari keduanya. Fungsi pengurangan _Range_fun rentang digunakan pada fase pertama dengan nilai identitas sebagai nilai awal, dan fungsi _Sym_reduce_fun biner diterapkan ke sub hasil pada fase kedua.

parallel_sort

Mengatur elemen dalam rentang tertentu ke dalam urutan non-turun, atau sesuai dengan kriteria pemesanan yang ditentukan oleh predikat biner, secara paralel. Fungsi ini secara semantik mirip std::sort dengan di mana fungsi ini adalah pengurutan berbasis perbandingan, tidak stabil, di tempat.

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);

Parameter

_Random_iterator
Jenis iterator dari rentang input.

_Fungsi
Jenis funktor perbandingan biner.

_Mulai
Iterator akses acak yang mengatasi posisi elemen pertama dalam rentang yang akan diurutkan.

_Akhir
Iterator akses acak yang membahas posisi satu melewati elemen akhir dalam rentang yang akan diurutkan.

_Func
Objek fungsi predikat yang ditentukan pengguna yang menentukan kriteria perbandingan yang harus dipenuhi oleh elemen berturut-turut dalam pengurutan. Predikat biner mengambil dua argumen dan kembali true ketika puas dan false ketika tidak puas. Fungsi komparator ini harus memberlakukan urutan lemah yang ketat pada pasangan elemen dari urutan.

_Chunk_size
Ukuran minimum gugus yang akan dibagi menjadi dua untuk eksekusi paralel.

Keterangan

Kelebihan beban pertama menggunakan komparator std::lessbiner .

Kelebihan beban kedua menggunakan komparator biner yang disediakan yang harus memiliki tanda tangan bool _Func(T, T) di mana T adalah jenis elemen dalam rentang input.

Algoritma membagi rentang input menjadi dua gugus dan secara berturut-turut membagi setiap gugus menjadi dua sub-gugus untuk eksekusi secara paralel. Argumen _Chunk_size opsional dapat digunakan untuk menunjukkan algoritma bahwa argumen tersebut harus menangani potongan ukuran <_Chunk_size secara serial.

parallel_transform

Menerapkan objek fungsi tertentu ke setiap elemen dalam rentang sumber, atau ke sepasang elemen dari dua rentang sumber, dan menyalin nilai pengembalian objek fungsi ke dalam rentang tujuan, secara paralel. Fungsional ini secara semantik setara std::transformdengan .

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);

Parameter

_Input_iterator1
Jenis iterator input pertama atau hanya.

_Output_iterator
Jenis iterator output.

_Unary_operator
Jenis funktor unary yang akan dijalankan pada setiap elemen dalam rentang input.

_Input_iterator2
Jenis iterator input kedua.

_Binary_operator
Jenis funktor biner dijalankan secara berpasangan pada elemen dari dua rentang sumber.

_Partitioner
pertama1
Iterator input yang membahas posisi elemen pertama dalam rentang sumber pertama atau satu-satunya yang akan dioperasikan.

last1
Iterator input yang membahas posisi satu melewati elemen akhir di rentang sumber pertama atau satu-satunya yang akan dioperasikan.

_Hasil
Iterator output yang membahas posisi elemen pertama dalam rentang tujuan.

_Unary_op
Objek fungsi unary yang ditentukan pengguna yang diterapkan ke setiap elemen dalam rentang sumber.

_Bagian
Referensi ke objek partisi. Argumen dapat berupa salah satu auto_partitionerconst&,const static_partitioner&, simple_partitioner&, constatau affinity_partitioner& Jika objek affinity_partitioner digunakan, referensi harus berupa referensi nilai l non-const, sehingga algoritma dapat menyimpan status untuk digunakan kembali perulangan di masa mendatang.

pertama2
Iterator input yang membahas posisi elemen pertama dalam rentang sumber kedua yang akan dioperasikan.

_Binary_op
Objek fungsi biner yang ditentukan pengguna yang diterapkan secara berpasangan, dalam urutan penerusan, ke dua rentang sumber.

Tampilkan Nilai

Iterator output yang membahas posisi satu melewati elemen akhir dalam rentang tujuan yang menerima elemen output yang diubah oleh objek fungsi.

Keterangan

auto_partitioner akan digunakan untuk kelebihan beban tanpa argumen partitioner eksplisit.

Untuk iterator yang tidak mendukung akses acak, hanya auto_partitioner yang didukung.

Kelebihan beban yang mengambil argumen _Unary_op mengubah rentang input menjadi rentang output dengan menerapkan funktor unary ke setiap elemen dalam rentang input. _Unary_op harus mendukung operator panggilan fungsi dengan tanda tangan operator()(T) di mana T adalah jenis nilai rentang yang diulang.

Kelebihan beban yang mengambil argumen _Binary_op mengubah dua rentang input menjadi rentang output dengan menerapkan funktor biner ke satu elemen dari rentang input pertama dan satu elemen dari rentang input kedua. _Binary_op harus mendukung operator panggilan fungsi dengan tanda tangan operator()(T, U) di mana T, U adalah jenis nilai dari dua iterator input.

Untuk informasi selengkapnya, lihat Algoritma Paralel.

Menerima

Implementasi penerimaan umum, memungkinkan konteks untuk menunggu data dari tepat satu sumber dan memfilter nilai yang diterima.

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);

Parameter

T
Jenis payload.

_Src
Penunjuk atau referensi ke sumber tempat data diharapkan.

_Timeout
Waktu maksimum di mana metode harus untuk data, dalam milidetik.

_Filter_proc
Fungsi filter yang menentukan apakah pesan harus diterima.

Tampilkan Nilai

Nilai dari sumber, dari jenis payload.

Keterangan

Jika parameter _Timeout memiliki nilai selain konstanta COOPERATIVE_TIMEOUT_INFINITE, pengecualian operation_timed_out dilemparkan jika jumlah waktu yang ditentukan kedaluwarsa sebelum pesan diterima. Jika Anda menginginkan batas waktu panjang nol, Anda harus menggunakan fungsi try_receive , dibandingkan dengan panggilan receive dengan batas waktu 0 (nol), karena lebih efisien dan tidak membuang pengecualian pada batas waktu.

Untuk informasi selengkapnya, lihat Fungsi Passing Pesan.

run_with_cancellation_token

Menjalankan objek fungsi dengan segera dan sinkron dalam konteks token pembatalan tertentu.

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

Parameter

_Fungsi
Jenis objek fungsi yang akan dipanggil.

_Func
Objek fungsi yang akan dijalankan. Objek ini harus mendukung operator panggilan fungsi dengan tanda tangan void(void).

_Ct
Token pembatalan yang akan mengontrol pembatalan implisit objek fungsi. Gunakan cancellation_token::none() jika Anda ingin fungsi dijalankan tanpa kemungkinan pembatalan implisit dari grup tugas induk dibatalkan.

Keterangan

Setiap titik gangguan dalam objek fungsi akan dipicu ketika cancellation_token dibatalkan. Token _Ct eksplisit akan mengisolasi ini _Func dari pembatalan induk jika induk memiliki token yang berbeda atau tanpa token.

Mengirim

Operasi pengiriman sinkron, yang menunggu hingga target menerima atau menolak pesan.

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

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

Parameter

T
Jenis payload.

_Trg
Penunjuk atau referensi ke target tempat data dikirim.

_Data
Referensi ke data yang akan dikirim.

Tampilkan Nilai

true jika pesan diterima, false jika tidak.

Keterangan

Untuk informasi selengkapnya, lihat Fungsi Passing Pesan.

set_ambient_scheduler

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

Parameter

_Scheduler
Penjadwal sekitar yang akan diatur.

set_task_execution_resources

Membatasi sumber daya eksekusi yang digunakan oleh utas pekerja internal Concurrency Runtime ke set afinitas yang ditentukan.

Ini valid untuk memanggil metode ini hanya sebelum Resource Manager dibuat, atau di antara dua masa pakai Resource Manager. Ini dapat dipanggil beberapa kali selama Resource Manager tidak ada pada saat pemanggilan. Setelah batas afinitas ditetapkan, batas tersebut tetap berlaku hingga panggilan valid berikutnya ke set_task_execution_resources metode .

Masker afinitas yang disediakan tidak perlu menjadi subset dari masker afinitas proses. Afinitas proses akan diperbarui jika perlu.

void __cdecl set_task_execution_resources(
    DWORD_PTR _ProcessAffinityMask);

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

Parameter

_ProcessAffinityMask
Masker afinitas tempat utas pekerja Runtime Konkurensi harus dibatasi. Gunakan metode ini pada sistem dengan lebih dari 64 utas perangkat keras hanya jika Anda ingin membatasi Runtime Konkurensi ke subset grup prosesor saat ini. Secara umum, Anda harus menggunakan versi metode yang menerima array afinitas grup sebagai parameter, untuk membatasi afinitas pada komputer dengan lebih dari 64 utas perangkat keras.

count
Jumlah GROUP_AFFINITY entri dalam array yang ditentukan oleh parameter _PGroupAffinity.

_PGroupAffinity
Array GROUP_AFFINITY entri.

Keterangan

Metode ini akan memberikan pengecualian invalid_operation jika Resource Manager ada pada saat dipanggil, dan pengecualian invalid_argument jika afinitas yang ditentukan menghasilkan sekumpulan sumber daya kosong.

Versi metode yang mengambil array afinitas grup sebagai parameter hanya boleh digunakan pada sistem operasi dengan versi Windows 7 atau yang lebih tinggi. Jika tidak, pengecualian invalid_operation dilemparkan.

Memodifikasi afinitas proses secara terprogram setelah metode ini dipanggil tidak akan menyebabkan Resource Manager mengevaluasi kembali afinitas yang dibatasi. Oleh karena itu, semua perubahan pada afinitas proses harus dilakukan sebelum memanggil metode ini.

pertukaran

Menukar elemen dari dua concurrent_vector objek.

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

Parameter

T
Jenis data elemen yang disimpan dalam vektor bersamaan.

_Ax
Jenis alokator vektor bersamaan.

_J
Vektor bersamaan yang elemennya akan ditukar dengan vektor _Bbersamaan .

_B
Vektor bersamaan menyediakan elemen yang akan ditukar, atau vektor yang elemennya akan ditukar dengan vektor _Abersamaan .

Keterangan

Fungsi templat adalah algoritma yang khusus pada kelas concurrent_vector kontainer untuk menjalankan fungsi _Aanggota . concurrent_vector::swap( _B). Ini adalah instans pengurutan parsial templat fungsi oleh pengkompilasi. Ketika fungsi templat kelebihan beban sedih sehingga kecocokan templat dengan panggilan fungsi tidak unik, maka pengkompilasi akan memilih versi fungsi templat yang paling khusus. Versi umum fungsi templat, template <class T> void swap(T&, T&), di kelas algoritma berfungsi berdasarkan penugasan dan merupakan operasi yang lambat. Versi khusus di setiap kontainer jauh lebih cepat karena dapat bekerja dengan representasi internal kelas kontainer.

Metode ini tidak aman konkurensi. Anda harus memastikan bahwa tidak ada utas lain yang melakukan operasi pada salah satu vektor bersamaan saat Anda memanggil metode ini.

task_from_exception

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

Parameter

_TaskType

_ExType

_Pengecualian

_TaskOptions

Tampilkan Nilai

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());

Parameter

T

_Param

_TaskOptions

Tampilkan Nilai

Trace_agents_register_name

Mengaitkan nama yang diberikan ke blok pesan atau agen dalam jejak ETW.

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

Parameter

T
Jenis objek. Ini biasanya merupakan blok pesan atau agen.

_PObject
Penunjuk ke blok pesan atau agen yang dinamai dalam pelacakan.

_Nama
Nama untuk objek yang diberikan.

try_receive

Implementasi coba-terima umum, memungkinkan konteks untuk mencari data dari tepat satu sumber dan memfilter nilai yang diterima. Jika data belum siap, metode akan mengembalikan false.

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);

Parameter

T
Jenis payload

_Src
Penunjuk atau referensi ke sumber tempat data diharapkan.

_Nilai
Referensi ke lokasi tempat hasil akan ditempatkan.

_Filter_proc
Fungsi filter yang menentukan apakah pesan harus diterima.

Tampilkan Nilai

Nilai bool yang menunjukkan apakah payload ditempatkan di _value.

Keterangan

Untuk informasi selengkapnya, lihat Fungsi Passing Pesan.

tunggu

Menjeda konteks saat ini untuk jumlah waktu tertentu.

void __cdecl wait(unsigned int _Milliseconds);

Parameter

_Milidetik
Jumlah milidetik konteks saat ini harus dijeda. _Milliseconds Jika parameter diatur ke nilai 0, konteks saat ini harus menghasilkan eksekusi ke konteks lain yang dapat dijalankan sebelum melanjutkan.

Keterangan

Jika metode ini dipanggil pada konteks penjadwal Runtime Konkurensi, penjadwal akan menemukan konteks yang berbeda untuk dijalankan pada sumber daya yang mendasarinya. Karena penjadwal bersifat kooperatif, konteks ini tidak dapat dilanjutkan tepat setelah jumlah milidetik yang ditentukan. Jika penjadwal sibuk menjalankan tugas lain yang tidak secara kooperatif menghasilkan penjadwal, periode tunggu bisa tidak terbatas.

when_all

Membuat tugas yang akan berhasil diselesaikan ketika semua tugas yang disediakan sebagai argumen berhasil diselesaikan.

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));

Parameter

_Iterator
Jenis iterator input.

_Mulai
Posisi elemen pertama dalam rentang elemen yang akan digabungkan ke dalam tugas yang dihasilkan.

_Akhir
Posisi elemen pertama di luar rentang elemen yang akan digabungkan ke dalam tugas yang dihasilkan.

_TaskOptions
Objek task_options.

Tampilkan Nilai

Tugas yang berhasil diselesaikan ketika semua tugas input berhasil diselesaikan. Jika tugas input berjenis T, output fungsi ini akan menjadi task<std::vector<T>>. Jika tugas input berjenis void tugas output juga akan menjadi task<void>.

Keterangan

when_all adalah fungsi non-pemblokiran yang menghasilkan task sebagai hasilnya. Tidak seperti task::wait, aman untuk memanggil fungsi ini di aplikasi UWP pada utas ASTA (Application STA).

Jika salah satu tugas dibatalkan atau melempar pengecualian, tugas yang dikembalikan akan selesai lebih awal, dalam status dibatalkan, dan pengecualian, jika satu terjadi, akan dilemparkan jika Anda memanggil tugas::get atau task::wait pada tugas tersebut.

Untuk informasi selengkapnya, lihat Paralelisme Tugas.

when_any

Membuat tugas yang akan berhasil diselesaikan ketika salah satu tugas yang disediakan sebagai argumen berhasil diselesaikan.

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));

Parameter

_Iterator
Jenis iterator input.

_Mulai
Posisi elemen pertama dalam rentang elemen yang akan digabungkan ke dalam tugas yang dihasilkan.

_Akhir
Posisi elemen pertama di luar rentang elemen yang akan digabungkan ke dalam tugas yang dihasilkan.

_TaskOptions
_CancellationToken
Token pembatalan yang mengontrol pembatalan tugas yang dikembalikan. Jika Anda tidak memberikan token pembatalan, tugas yang dihasilkan akan menerima token pembatalan tugas yang menyebabkannya selesai.

Tampilkan Nilai

Tugas yang berhasil diselesaikan ketika salah satu tugas input berhasil diselesaikan. Jika tugas input berjenis T, output fungsi ini akan menjadi task<std::pair<T, size_t>>>, di mana elemen pertama dari pasangan adalah hasil dari tugas penyelesaian, dan elemen kedua adalah indeks tugas yang selesai. Jika tugas input berjenis void output adalah task<size_t>, di mana hasilnya adalah indeks tugas penyelesaian.

Keterangan

when_any adalah fungsi non-pemblokiran yang menghasilkan task sebagai hasilnya. Tidak seperti task::wait, aman untuk memanggil fungsi ini di aplikasi UWP pada utas ASTA (Application STA).

Untuk informasi selengkapnya, lihat Paralelisme Tugas.

Baca juga

Namespace layanan konkurensi