Bagikan melalui


Fungsi namespace konkurensi

Fungsi berikut tersedia di namespace:

Alokasi

Mengalokasikan blok memori sebesar 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

jika pesan diterima sebelum metode dikembalikan, jika tidak.

Keterangan

Untuk informasi selengkapnya, lihat Fungsi Penyampaian Pesan.

batalkan_tugas_saat_ini

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

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

inline __declspec(noreturn) void __cdecl cancel_current_task();

bersihkan

Menghapus antrean serentak dan 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 pengembalian adalah salah satu dari , , , atau berdasarkan penanda 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 dari mana membuat konstruk asinkron untuk Windows Runtime.

Tampilkan Nilai

Konstruksi asinkron yang diwakili oleh IAsyncAction^, IAsyncActionWithProgressTProgress^, IAsyncOperationTResult^, atau IAsyncOperationWithProgressTResult, TProgress^. Antarmuka yang dihasilkan tergantung pada signature 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 menyebabkan pembuatan operasi TResult.

Lambda juga dapat mengembalikan yang merangkum pekerjaan asinkron dalam dirinya sendiri atau merupakan kelanjutan dari rantai tugas yang mewakili pekerjaan asinkron. Dalam hal ini, lambda itu sendiri dijalankan sebaris, karena tugas dijalankan secara asinkron, dan tipe pengembalian lambda dibuka untuk menghasilkan konstruksi asinkron yang dikembalikan oleh . Ini menyiratkan bahwa lambda yang mengembalikan tugasvoid akan memicu pembuatan aksi, dan lambda yang mengembalikan tugasTResult akan memicu pembuatan operasi TResult.

Lambda dapat mengambil nol, satu, atau dua argument. Argumen yang valid adalah dan , dalam urutan tersebut jika keduanya digunakan. Lambda tanpa argumen menyebabkan pembuatan struktur asinkron tanpa kemampuan untuk pelaporan kemajuan. Lambda yang menerima progress_reporterTProgress akan menyebabkan mengembalikan konstruk asinkron yang melaporkan kemajuan dengan jenis TProgress setiap kali metode dari 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 tugasTResult), maka lambda akan dijalankan secara asinkron dalam proses MTA dengan konteks tugas yang dibuat secara implisit oleh Runtime untuk itu. Metode akan menyebabkan pembatalan pekerjaan implisit.

Jika isi lambda mengembalikan tugas, lambda dieksekusi secara langsung, dan dengan mendeklarasikan lambda untuk mengambil argumen tipe , Anda dapat memicu pembatalan tugas apa pun yang Anda buat dalam lambda dengan meneruskan token tersebut saat Anda membuatnya. Anda juga dapat menggunakan metode pada token untuk menyebabkan Runtime memanggil panggilan balik saat Anda memanggil pada operasi asinkron atau tindakan yang dihasilkan.

Fungsi ini hanya tersedia untuk aplikasi Windows Runtime.

CreateResourceManager

Mengembalikan antarmuka yang mewakili instans tunggal (singleton) dari 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 .

Keterangan

Beberapa panggilan berikutnya ke metode tersebut akan mengembalikan instance dari 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.

buat_tugas

Membuat objek tugas PPL. dapat digunakan di mana saja Anda akan menggunakan konstruktor tugas. Ini disediakan terutama untuk kenyamanan, karena memungkinkan penggunaan 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 dari mana tugas akan dibuat.

_ReturnType
Jenis.

_Param
Parameter dari mana tugas akan dibangun. Ini bisa berupa objek lambda atau fungsi, objek task_completion_event, objek task yang berbeda, 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 tipe , yang disimpulkan dari .

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 sebagai parameter pertama.

Jenis tugas yang dikembalikan disimpulkan dari parameter pertama ke fungsi. Jika adalah , , atau functor yang mengembalikan jenis atau , jenis tugas yang dibuat adalah .

Dalam aplikasi UWP, jika _Param berjenis Windows::Foundation::IAsyncOperation<T>^ atau Windows::Foundation::IAsyncOperationWithProgress<T,P>^, atau funktor yang mengembalikan salah satu dari 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>.

NonaktifkanPelacakan

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, dikembalikan. Jika pelacakan sebelumnya tidak dimulai, dikembalikan

EnableTracing

Mengaktifkan pelacakan di Concurrency Runtime. 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, dikembalikan; jika tidak, dikembalikan.

Gratis

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

void __cdecl Free(_Pre_maybenull_ _Post_invalid_ void* _PAllocation);

Parameter

_PAllocation
Penunjuk ke memori yang sebelumnya dialokasikan oleh metode yang akan dibebaskan. Jika parameter diatur ke nilai , 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 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 antarmuka IExecutionContext 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

Menampilkan jumlah utas perangkat keras pada sistem dasar.

unsigned int __cdecl GetProcessorCount();

Tampilkan Nilai

Jumlah utas perangkat keras.

Keterangan

unsupported_os dilemparkan jika sistem operasi tidak didukung oleh Concurrency Runtime.

DapatkanJumlahNodeProsesor

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 pengenal unik yang dapat ditetapkan ke penjadwal yang mengimplementasikan antarmuka .

unsigned int __cdecl GetSchedulerId();

Tampilkan Nilai

Pengidentifikasi unik untuk pengatur jadwal.

Keterangan

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

penetapan_internal_pengiterasi

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

Parameter

T

_Ax

_Saya

pertama

terakhir

titik penghentian

Membuat titik interupsi 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 oleh fungsi. Pengecualian akan ditangkap dan ditangani oleh runtime, dan menangkapnya dapat menyebabkan program Anda berperilaku tidak normal.

apakah_grup_tugas_sedang_dibatalkan_aktif

Menyatakan apakah grup tugas yang saat ini menjalankan langsung pada konteks saat ini sedang dalam proses pembatalan aktif (atau tidak lama lagi). Perhatikan bahwa jika tidak ada grup tugas yang saat ini menjalankan secara langsung pada konteks saat ini, akan dikembalikan.

bool __cdecl is_current_task_group_canceling();

Tampilkan Nilai

jika grup tugas yang sedang dijalankan akan dibatalkan, jika tidak.

Keterangan

Untuk informasi selengkapnya, lihat Pembatalan.

buat_pilihan

Membuat blok olahpesan dari sumber input opsional atau 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 di mana tugas propagasi untuk blok olahpesan dijadwalkan.

_Item1
Sumber pertama.

_Item2
Sumber kedua.

_Item
Sumber tambahan.

_PScheduleGroup
Objek di mana tugas propagasi untuk blok olahpesan dijadwalkan. Objek yang digunakan dapat disimpulkan dari grup jadwal.

Tampilkan Nilai

Blok pesan dengan dua atau beberapa sumber input.

make_greedy_bergabung

Membuat blok olahpesan dari sumber input opsional atau 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 di mana tugas propagasi untuk blok olahpesan dijadwalkan.

_Item1
Sumber pertama.

_Item2
Sumber kedua.

_Item
Sumber tambahan.

_PScheduleGroup
Objek di mana tugas propagasi untuk blok olahpesan dijadwalkan. Objek yang digunakan dapat disimpulkan dari grup jadwal.

Tampilkan Nilai

Blok pesan dengan dua atau beberapa sumber input.

make_join

Membuat blok olahpesan dari sumber input opsional atau 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 di mana tugas propagasi untuk blok olahpesan dijadwalkan.

_Item1
Sumber pertama.

_Item2
Sumber kedua.

_Item
Sumber tambahan.

_PScheduleGroup
Objek di mana tugas propagasi untuk blok olahpesan dijadwalkan. Objek yang digunakan dapat disimpulkan dari grup jadwal.

Tampilkan Nilai

Blok pesan dengan dua atau beberapa sumber input.

buat_tugas

Metode pabrik untuk membuat 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 objek.

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

Tampilkan Nilai

Objek .

Keterangan

Fungsi ini berguna ketika Anda perlu membuat 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 menjadi urutan tidak menurun, atau sesuai dengan kriteria pengurutan yang ditentukan oleh predikat biner, secara paralel. Fungsi ini secara semantik mirip , karena fungsi ini adalah pengurutan di tempat yang tidak stabil berbasis bandingan kecuali bahwa membutuhkan ruang tambahan, dan elemen yang diurutkan memerlukan inisialisasi default.

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 menunjukkan posisi elemen pertama dalam rentang untuk diurutkan.

_Akhir
Iterator akses acak yang menunjuk posisi satu setelah 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 ketika puas dan ketika tidak puas. Fungsi komparator ini harus memberlakukan urutan lemah yang ketat pada pasangan elemen dari urutan.

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

Keterangan

Semua kelebihan beban memerlukan ruang tambahan, di mana adalah jumlah elemen yang akan diurutkan, dan 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 biner , maka komparator tersebut digunakan sebagai default, yang mengharuskan jenis elemen untuk menyediakan operator .

Jika Anda tidak menyediakan jenis atau instans alokator, maka alokator memori dari Pustaka Standar C++ akan 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 opsional dapat digunakan untuk menunjukkan algoritma bahwa argumen tersebut harus menangani potongan ukuran secara serial.

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.

pertama
Indeks pertama yang disertakan dalam iterasi.

terakhir
Indeks yang satu posisi setelah indeks terakhir yang akan disertakan dalam iterasi.

_Langkah
Nilai yang akan dilangkahi saat melakukan iterasi dari ke . 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 .

_Bagian
Referensi ke objek partisi. Argumen dapat berupa salah satu dari auto_partitioner, static_partitioner, simple_partitioner atau affinity_partitioner. Jika objek affinity_partitioner digunakan, referensi harus menjadi referensi non-const l-value, sehingga algoritma dapat menyimpan status untuk perulangan di masa mendatang untuk digunakan kembali.

Keterangan

Untuk informasi selengkapnya, lihat Algoritma Paralel.

parallel_for_each

menerapkan fungsi tertentu ke setiap elemen dalam rentang, secara paralel. Setara secara semantik dengan fungsi di namespace , kecuali bahwa iterasi atas elemen dilakukan secara paralel tanpa urutan iterasi yang ditentukan. Argumen harus mendukung operator panggilan fungsi formulir di mana parameter 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
pertama
Iterator yang membahas posisi elemen pertama yang disertakan dalam iterasi paralel.

terakhir
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 dari auto_partitioner, static_partitioner, simple_partitioner atau affinity_partitioner. Jika objek affinity_partitioner digunakan, referensi harus menjadi referensi non-const l-value, sehingga algoritma dapat menyimpan status untuk perulangan di masa mendatang untuk digunakan kembali.

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.

pemanggilan_paralel

Menjalankan objek fungsi yang disediakan sebagai parameter secara paralel, dan menunggu hingga fungsi-fungsi tersebut selesai dieksekusi. Setiap objek fungsi bisa berupa ekspresi lambda, penunjuk ke fungsi, atau objek apa pun yang mendukung operator panggilan fungsi dengan tanda tangan .

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 yang diteruskan sebagai parameter ke fungsi ini melemparkan pengecualian, runtime akan memilih salah satu pengecualian tersebut dan menyebarkannya ke luar dari pemanggilan ke .

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 menunjukkan posisi elemen pertama dalam rentang untuk diurutkan.

_Akhir
Iterator akses acak yang menunjuk posisi satu setelah 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 minimum dari potongan yang akan dibagi menjadi dua untuk eksekusi paralel.

Keterangan

Semua kelebihan beban memerlukan ruang tambahan, di mana adalah jumlah elemen yang akan diurutkan, dan merupakan jenis elemen. Funktor proyeksi unary dengan tanda tangan diperlukan untuk mengembalikan kunci ketika diberikan elemen, di mana adalah jenis elemen dan 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, maka alokator memori dari Pustaka Standar C++ akan 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 opsional dapat digunakan untuk menunjukkan algoritma bahwa argumen tersebut harus menangani potongan ukuran 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. secara semantik mirip dengan , 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 , di mana _Reduce_type sama dengan jenis identitas dan jenis hasil pengurangan. Untuk kelebihan beban ketiga, ini harus konsisten dengan jenis output dari .

_Reduce_jenis
Jenis yang akan menjadi hasil reduksi dari input, yang dapat berbeda dari jenis elemen input. Nilai pengembalian dan nilai identitas akan memiliki tipe ini.

_Range_reduce_fun
Jenis fungsi reduksi rentang. Ini harus merupakan jenis fungsi dengan tanda tangan , _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 berada satu posisi setelah elemen terakhir dari rentang yang akan direduksi.

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

_Sym_fun
Fungsi simetris yang akan digunakan pada tahap kedua dari reduksi. 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 bagian berdasarkan jumlah pekerja yang tersedia untuk penjadwal yang mendasari. Pengurangan terjadi dalam dua fase, fase pertama melakukan pengurangan dalam setiap gugus, dan fase kedua melakukan pengurangan antara hasil parsial dari setiap gugus.

Overload pertama mengharuskan iterator , harus sama dengan jenis nilai identitas dan jenis hasil reduksi. Jenis elemen T harus menyediakan operator untuk mengurangi elemen di setiap gugus. Operator yang sama juga digunakan pada fase kedua.

Kelebihan beban kedua juga mengharuskan iterator sama dengan jenis nilai identitas serta jenis hasil pengurangan. Operator 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 mungkin berbeda dari keduanya. Fungsi pengurangan rentang digunakan pada fase pertama dengan nilai identitas sebagai nilai awal, dan fungsi biner diterapkan ke sub hasil pada fase kedua.

parallel_sort

Mengatur elemen dalam rentang tertentu menjadi urutan tidak menurun, atau sesuai dengan kriteria pengurutan yang ditentukan oleh predikat biner, secara paralel. Fungsi ini secara semantik mirip dengan karena merupakan pengurutan berbasis perbandingan yang tidak stabil dan dilakukan di lokasi.

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 menunjukkan posisi elemen pertama dalam rentang untuk diurutkan.

_Akhir
Iterator akses acak yang menunjuk posisi satu setelah 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 ketika puas dan ketika tidak puas. Fungsi komparator ini harus memberlakukan urutan lemah yang ketat pada pasangan elemen dari urutan.

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

Keterangan

Kelebihan beban pertama menggunakan komparator biner .

Kelebihan beban kedua menggunakan komparator biner yang disediakan yang harus memiliki tanda tangan di mana 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 opsional dapat digunakan untuk menunjukkan algoritma bahwa argumen tersebut harus menangani potongan ukuran 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 dengan .

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 dari iterator input pertama atau satu-satunya.

_Output_iterator
Jenis iterator output.

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

_Input_iterator2
Jenis iterator masukan kedua.

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

_Partitioner
pertama1
Input iterator yang menentukan posisi elemen pertama dalam rentang sumber data pertama atau satu-satunya yang akan diolah.

last1
Iterator input yang merujuk pada posisi satu setelah elemen terakhir dalam rentang sumber daya 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 dari auto_partitioner, static_partitioner, simple_partitioner atau affinity_partitioner. Jika objek affinity_partitioner digunakan, referensi harus menjadi referensi non-const l-value, sehingga algoritma dapat menyimpan status untuk perulangan di masa mendatang untuk digunakan kembali.

first2
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, secara berurutan, 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 mengubah rentang input menjadi rentang output dengan menerapkan funktor unary ke setiap elemen dalam rentang input. harus mendukung operator panggilan fungsi dengan tanda tangan di mana adalah jenis nilai rentang yang diulang.

Overload yang menggunakan argumen mengubah dua rentang input menjadi rentang output dengan menerapkan fungsi biner ke satu elemen dari rentang input pertama dan satu elemen dari rentang input kedua. harus mendukung operator panggilan fungsi dengan tanda tangan di mana , 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 yang dibutuhkan metode untuk memproses data, dalam milidetik.

_Filter_proc
Fungsi filter yang menentukan apakah pesan harus diterima.

Tampilkan Nilai

Nilai dari sumber, dari jenis payload.

Keterangan

Jika parameter memiliki nilai selain konstanta , 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 dengan batas waktu (nol), karena lebih efisien dan tidak membuang pengecualian pada batas waktu.

Untuk informasi selengkapnya, lihat Fungsi Penyampaian Pesan.

jalankan_dengan_token_pembatalan

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 pemanggilan fungsi dengan signature void(void).

_Ct
Token pembatalan yang akan mengontrol pembatalan implisit objek fungsi. Gunakan jika Anda ingin fungsi dieksekusi tanpa kemungkinan pembatalan implisit dari grup tugas induk yang sedang dibatalkan.

Keterangan

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

kirim

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

jika pesan diterima, jika tidak.

Keterangan

Untuk informasi selengkapnya, lihat Fungsi Penyampaian Pesan.

Atur_penjadwal_lingkungan

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

Parameter

_Scheduler
Pengatur jadwal ambient yang akan disetel.

set_sumber_daya_pelaksanaan_tugas

Membatasi sumber daya eksekusi yang digunakan oleh thread pekerja internal Concurrency Runtime pada set afinitas yang ditentukan.

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 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 yang digunakan untuk membatasi utas pekerja pada Runtime Konkruensi. Gunakan metode ini pada sistem dengan lebih dari 64 utas perangkat keras hanya jika Anda ingin membatasi Concurrency Runtime ke sebuah subset pada kelompok prosesor yang sedang aktif 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.

hitung
Jumlah entri dalam array yang ditentukan oleh parameter .

_PGroupAffinity
Array entri.

Keterangan

Metode ini akan memberikan pengecualian invalid_operation jika ada Resource Manager 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 lebih tinggi. Jika tidak, pengecualian 'invalid_operation' dilemparkan.

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

tukar

Menukar elemen dari dua 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 konkuren.

_Ax
Jenis alokator vektor bersamaan.

_A
Vektor bersamaan yang elemennya akan ditukar dengan vektor bersamaan .

_B
Vektor serentak yang menyediakan elemen untuk ditukar, atau vektor yang elemennya akan ditukar dengan elemen dari vektor serentak .

Keterangan

Fungsi templat adalah algoritma yang dikhususkan pada kelas wadah untuk menjalankan fungsi anggota . concurrent_vector::swap(). Ini adalah contoh pengurutan parsial templat fungsi oleh kompiler. Ketika fungsi templat dibebani berlebih sehingga kecocokan fungsi templat dengan panggilan fungsi tidak unik, maka kompilator akan memilih versi fungsi templat yang paling khusus. Versi umum fungsi templat, , 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

Agen_melacak_mendaftarkan_nama

Mengaitkan nama yang diberikan ke blok pesan atau agen dalam penelusuran 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 .

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 yang menunjukkan apakah atau tidak payload ditempatkan di .

Keterangan

Untuk informasi selengkapnya, lihat Fungsi Penyampaian Pesan.

tunggu

Menjeda konteks saat ini untuk jumlah waktu tertentu.

void __cdecl wait(unsigned int _Milliseconds);

Parameter

_Milidetik
Jumlah milidetik yang digunakan untuk menghentikan sementara konteks saat ini. Jika parameter diatur ke nilai , 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 mencari konteks lain untuk dijalankan di atas sumber daya yang tersedia. 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 menyerahkan kendali kepada penjadwal, periode tunggu dapat berlangsung tanpa batas.

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 dari 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 .

Tampilkan Nilai

Tugas yang berhasil diselesaikan ketika semua tugas input berhasil diselesaikan. Jika tugas input berjenis , output fungsi ini akan menjadi . Jika tugas input berjenis tugas output juga akan menjadi .

Keterangan

adalah fungsi non-pemblokiran yang menghasilkan 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 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 dari 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 hasil tersebut akan menerima token pembatalan dari tugas yang menyebabkannya selesai.

Tampilkan Nilai

Tugas yang berhasil diselesaikan ketika salah satu tugas input berhasil diselesaikan. Jika tugas input berjenis , output fungsi ini akan menjadi , di mana elemen pertama dari pasangan adalah hasil dari tugas penyelesaian, dan elemen kedua adalah indeks tugas yang selesai. Jika tugas input berjenis output adalah , di mana hasilnya adalah indeks tugas penyelesaian.

Keterangan

adalah fungsi non-pemblokiran yang menghasilkan 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.

Lihat juga

Namespace layanan konkurensi