Kelas task_group

Kelas mewakili task_group kumpulan karya paralel yang dapat ditunggu atau dibatalkan.

Sintaks

class task_group;

Anggota

Konstruktor Publik

Nama Deskripsi
task_group Kelebihan beban. Membangun objek baru task_group .
~task_group Destructor Menghancurkan suatu task_group objek. Anda diharapkan untuk memanggil baik wait atau run_and_wait metode pada objek sebelum destructor mengeksekusi, kecuali destructor mengeksekusi sebagai hasil dari stack unwinding karena pengecualian.

Metode Publik

Nama Deskripsi
batalkan Melakukan upaya terbaik untuk membatalkan sub-pohon pekerjaan yang berakar pada kelompok tugas ini. Setiap tugas yang dijadwalkan pada grup tugas akan dibatalkan secara transitif jika memungkinkan.
is_canceling Memberi tahu penelepon apakah grup tugas saat ini berada di tengah-tengah pembatalan atau tidak. Ini tidak selalu menunjukkan bahwa metode itu cancel dipanggil pada task_group objek (meskipun seperti itu tentu memenuhi syarat metode ini untuk kembali true). Mungkin objek task_group dijalankan sebaris dan grup tugas lebih jauh di pohon kerja dibatalkan. Dalam kasus seperti ini di mana runtime dapat menentukan sebelumnya bahwa pembatalan akan mengalir melalui objek ini task_group , true akan dikembalikan juga.
lari Kelebihan beban. Menjadwalkan tugas pada task_group objek. Jika suatu task_handle objek diteruskan sebagai parameter ke run, penelepon bertanggung jawab untuk mengelola masa pakai task_handle objek. Versi metode yang mengambil referensi ke objek fungsi sebagai parameter melibatkan alokasi heap dalam runtime yang mungkin berkinerja kurang baik daripada menggunakan versi yang mengambil referensi ke objek task_handle . Versi yang mengambil parameter _Placement menyebabkan tugas menjadi bias terhadap eksekusi di lokasi yang ditentukan oleh parameter itu.
run_and_wait Kelebihan beban. Menjadwalkan tugas yang akan dijalankan sesuai pada konteks panggilan dengan bantuan task_group objek untuk dukungan pembatalan penuh. Fungsi kemudian menunggu sampai semua pekerjaan pada task_group objek telah selesai atau dibatalkan. Jika suatu task_handle objek diteruskan sebagai parameter ke run_and_wait, penelepon bertanggung jawab untuk mengelola masa pakai task_handle objek.
Tunggu Tunggu sampai semua pekerjaan pada task_group objek selesai atau dibatalkan.

Keterangan

Tidak seperti kelas yang sangat terbatas structured_task_group , kelas ini task_group jauh lebih umum dibangun. Itu tidak memiliki batasan apa pun yang dijelaskan oleh structured_task_group. task_group objek dapat digunakan dengan aman di seluruh utas dan digunakan dengan cara bentuk bebas. Kerugian dari task_group konstruksi adalah bahwa hal itu mungkin tidak melakukan serta structured_task_group membangun untuk tugas-tugas yang melakukan sejumlah kecil pekerjaan.

Untuk informasi selengkapnya, lihat Paralelisme Tugas.

Hierarki Pewarisan

task_group

Persyaratan

Header: ppl.h

Namespace: konkurensi

cancel

Melakukan upaya terbaik untuk membatalkan sub-pohon pekerjaan yang berakar pada kelompok tugas ini. Setiap tugas yang dijadwalkan pada grup tugas akan dibatalkan secara transitif jika memungkinkan.

void cancel();

Keterangan

Untuk informasi selengkapnya, lihat Pembatalan.

is_canceling

Memberi tahu penelepon apakah grup tugas saat ini berada di tengah-tengah pembatalan atau tidak. Ini tidak selalu menunjukkan bahwa metode itu cancel dipanggil pada task_group objek (meskipun seperti itu tentu memenuhi syarat metode ini untuk kembali true). Mungkin objek task_group dijalankan sebaris dan grup tugas lebih jauh di pohon kerja dibatalkan. Dalam kasus seperti ini di mana runtime dapat menentukan sebelumnya bahwa pembatalan akan mengalir melalui objek ini task_group , true akan dikembalikan juga.

bool is_canceling();

Tampilkan Nilai

Indikasi apakah objek berada task_group di tengah-tengah pembatalan (atau dijamin akan segera).

Keterangan

Untuk informasi selengkapnya, lihat Pembatalan.

jalankan

Menjadwalkan tugas pada task_group objek. Jika suatu task_handle objek diteruskan sebagai parameter ke run, penelepon bertanggung jawab untuk mengelola masa pakai task_handle objek. Versi metode yang mengambil referensi ke objek fungsi sebagai parameter melibatkan alokasi heap dalam runtime yang mungkin berkinerja kurang baik daripada menggunakan versi yang mengambil referensi ke objek task_handle . Versi yang mengambil parameter _Placement menyebabkan tugas menjadi bias terhadap eksekusi di lokasi yang ditentukan oleh parameter itu.

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

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

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

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

Parameter

_Function
Jenis objek fungsi yang akan dipanggil untuk mengeksekusi tubuh pegangan tugas.

_Func
Fungsi yang akan dipanggil untuk memanggil tubuh tugas. Ini mungkin ekspresi lambda atau objek lain yang mendukung versi operator panggilan fungsi dengan tanda tangan void operator()().

_Placement
Referensi ke lokasi di mana tugas yang diwakili oleh _Func parameter harus dijalankan.

_Task_handle
Pegangan untuk pekerjaan yang dijadwalkan. Perhatikan bahwa penelepon memiliki tanggung jawab untuk masa pakai objek ini. Runtime akan terus mengharapkannya untuk hidup sampai metode wait atau run_and_wait metode telah dipanggil pada objek ini task_group .

Keterangan

Runtime menjadwalkan fungsi kerja yang disediakan untuk dijalankan di lain waktu, yang dapat terjadi setelah fungsi panggilan kembali. Metode ini menggunakan objek task_handle untuk menyimpan salinan fungsi kerja yang disediakan. Oleh karena itu, setiap perubahan status yang terjadi dalam objek fungsi yang Anda lewati ke metode ini tidak akan muncul dalam salinan objek fungsi tersebut. Selain itu, pastikan bahwa masa pakai objek apa pun yang Anda lewati penunjuk atau dengan mengacu pada fungsi kerja tetap berlaku hingga fungsi kerja kembali.

task_group Jika destructs sebagai akibat dari tumpukan unwinding dari pengecualian, Anda tidak perlu menjamin bahwa panggilan telah dilakukan baik untuk kedua wait atau run_and_wait metode. Dalam hal ini, destructor akan membatalkan dengan tepat dan menunggu tugas yang diwakili oleh _Task_handle parameter selesai.

Metode ini memberikan pengecualian invalid_multiple_scheduling jika pegangan tugas yang diberikan oleh _Task_handle parameter telah dijadwalkan ke objek grup tugas melalui run metode dan belum ada panggilan intervensi ke grup tugas run_and_wait tersebutwait.

run_and_wait

Menjadwalkan tugas yang akan dijalankan sesuai pada konteks panggilan dengan bantuan task_group objek untuk dukungan pembatalan penuh. Fungsi kemudian menunggu sampai semua pekerjaan pada task_group objek telah selesai atau dibatalkan. Jika suatu task_handle objek diteruskan sebagai parameter ke run_and_wait, penelepon bertanggung jawab untuk mengelola masa pakai task_handle objek.

template<
   class _Function
>
task_group_status run_and_wait(
   task_handle<_Function>& _Task_handle
);

template<
   class _Function
>
task_group_status run_and_wait(
   const _Function& _Func
);

Parameter

_Function
Jenis objek fungsi yang akan dipanggil untuk mengeksekusi tubuh tugas.

_Task_handle
Pegangan untuk tugas yang akan dijalankan sejalan pada konteks panggilan. Perhatikan bahwa penelepon memiliki tanggung jawab untuk masa pakai objek ini. Runtime akan terus mengharapkannya untuk hidup sampai run_and_wait metode selesai eksekusi.

_Func
Fungsi yang akan dipanggil untuk memanggil tubuh pekerjaan. Ini mungkin ekspresi lambda atau objek lain yang mendukung versi operator panggilan fungsi dengan tanda tangan void operator()().

Tampilkan Nilai

Indikasi apakah penantian terpenuhi atau grup tugas dibatalkan, karena operasi pembatalan eksplisit atau pengecualian yang dilemparkan dari salah satu tugasnya. Untuk informasi lebih lanjut, lihat task_group_status.

Keterangan

Perhatikan bahwa satu atau beberapa tugas yang dijadwalkan ke objek ini task_group dapat dijalankan sebaris pada konteks panggilan.

Jika satu atau beberapa tugas yang dijadwalkan ke objek ini task_group memberikan pengecualian, runtime akan memilih salah satu pengecualian dari pemilihannya dan menyebarkannya keluar dari panggilan ke run_and_wait metode.

Sekembalinya run_and_wait dari metode pada suatu task_group objek, runtime mengatur ulang objek ke keadaan bersih di mana ia dapat digunakan kembali. Ini termasuk kasus di mana task_group objek dibatalkan.

Dalam jalur eksekusi yang tidak luar biasa, Anda memiliki mandat untuk memanggil metode ini atau wait metode sebelum penghancuran task_group eksekusi.

task_group

Membangun objek baru task_group .

task_group();

task_group(
   cancellation_token _CancellationToken
);

Parameter

_CancellationToken
Token pembatalan untuk diasosiasikan dengan grup tugas ini. Grup tugas akan dibatalkan saat token dibatalkan.

Keterangan

Konstruktor yang mengambil token pembatalan membuat token yang task_group akan dibatalkan ketika sumber yang terkait dengan token dibatalkan. Menyediakan token pembatalan eksplisit juga mengisolasi grup tugas ini agar tidak berpartisipasi dalam pembatalan implisit dari grup induk dengan token yang berbeda atau tanpa token.

~task_group

Menghancurkan suatu task_group objek. Anda diharapkan untuk memanggil baik wait atau run_and_wait metode pada objek sebelum destructor mengeksekusi, kecuali destructor mengeksekusi sebagai hasil dari stack unwinding karena pengecualian.

~task_group();

Keterangan

Jika destructor berjalan sebagai hasil dari eksekusi normal (misalnya, tidak menumpuk unwinding karena pengecualian) dan baik wait metode maupun run_and_wait metode tidak dipanggil, destructor dapat melemparkan pengecualian missing_wait .

tunggu

Tunggu sampai semua pekerjaan pada task_group objek selesai atau dibatalkan.

task_group_status wait();

Tampilkan Nilai

Indikasi apakah penantian terpenuhi atau grup tugas dibatalkan, karena operasi pembatalan eksplisit atau pengecualian yang dilemparkan dari salah satu tugasnya. Untuk informasi lebih lanjut, lihat task_group_status.

Keterangan

Perhatikan bahwa satu atau beberapa tugas yang dijadwalkan ke objek ini task_group dapat dijalankan sebaris pada konteks panggilan.

Jika satu atau beberapa tugas yang dijadwalkan ke objek ini task_group memberikan pengecualian, runtime akan memilih salah satu pengecualian dari pemilihannya dan menyebarkannya keluar dari panggilan ke wait metode.

Memanggil waittask_group objek mengatur ulang ke keadaan bersih di mana ia dapat digunakan kembali. Ini termasuk kasus di mana task_group objek dibatalkan.

Dalam jalur eksekusi yang tidak luar biasa, Anda memiliki mandat untuk memanggil metode ini atau run_and_wait metode sebelum penghancuran task_group eksekusi.

Lihat juga

namespace konkurensi
Kelas structured_task_group
Kelas task_handle