Bagikan melalui


Kelas "task_group"

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

Sintaks

class task_group;

Anggota

Konstruktor Publik

Nama Deskripsi
task_group Kelebihan beban. Membuat objek baru task_group .
~task_group Destructor Menghancurkan objek task_group . Anda diharapkan untuk memanggil metode wait atau run_and_wait pada objek sebelum destruktor dijalankan, kecuali jika destruktor dijalankan sebagai hasil dari penyusutan tumpukan karena pengecualian.

Metode Publik

Nama Deskripsi
batalkan Berusaha sebaik mungkin untuk membatalkan sub-bagian pekerjaan yang berakar pada grup tugas ini. Setiap tugas yang dijadwalkan pada grup tugas akan dibatalkan secara transitif jika memungkinkan.
sedang_membatalkan Menginformasikan pemanggil apakah kelompok tugas saat ini sedang mengalami pembatalan atau tidak. Ini tidak selalu menunjukkan bahwa metode cancel dipanggil pada objek task_group (meskipun tindakan tersebut tentu memenuhi syarat untuk mengembalikan true). Mungkin saja objek task_group mengeksekusi secara langsung dan grup tugas lebih tinggi 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.
jalankan Kelebihan beban. Menjadwalkan tugas pada task_group objek. Jika objek task_handle diteruskan sebagai parameter ke run, pemanggil bertanggung jawab untuk mengelola siklus hidup objek task_handle. Versi metode yang mengambil referensi ke objek fungsi sebagai parameter melibatkan alokasi timbunan di dalam runtime yang mungkin berkinerja kurang baik daripada menggunakan versi yang mengambil referensi ke task_handle objek. Versi yang mengambil parameter _Placement menyebabkan tugas menjadi bias untuk dieksekusi di lokasi yang ditentukan oleh parameter tersebut.
run_and_wait Kelebihan beban. Menjadwalkan tugas yang akan dijalankan langsung dalam konteks panggilan dengan bantuan objek task_group untuk dukungan pembatalan secara penuh. Fungsi kemudian menunggu hingga semua pekerjaan pada task_group objek telah selesai atau dibatalkan. Jika objek task_handle diteruskan sebagai parameter ke run_and_wait, pemanggil bertanggung jawab untuk mengelola siklus hidup objek task_handle.
Tunggu Menunggu hingga semua pekerjaan pada task_group objek selesai atau dibatalkan.

Keterangan

Tidak seperti kelas yang sangat dibatasi structured_task_group , task_group kelas ini jauh lebih umum. Ini 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 yang fleksibel. Kerugian dari struktur task_group adalah bahwa ia mungkin tidak mengeksekusi seefisien struktur structured_task_group untuk tugas yang menjalankan sejumlah kecil pekerjaan.

Untuk informasi selengkapnya, lihat Paralelisme Tugas.

Hierarki Pewarisan

task_group

Persyaratan

Header: ppl.h

Namespace: konkurensi

batalkan

Berusaha sebaik mungkin untuk membatalkan sub-bagian pekerjaan yang berakar pada grup tugas ini. Setiap tugas yang dijadwalkan pada grup tugas akan dibatalkan secara transitif jika memungkinkan.

void cancel();

Keterangan

Untuk informasi selengkapnya, lihat Pembatalan.

sedang membatalkan

Menginformasikan pemanggil apakah kelompok tugas saat ini sedang mengalami pembatalan atau tidak. Ini tidak selalu menunjukkan bahwa metode cancel dipanggil pada objek task_group (meskipun tindakan tersebut tentu memenuhi syarat untuk mengembalikan true). Mungkin saja objek task_group mengeksekusi secara langsung dan grup tugas lebih tinggi 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 task_group sedang dalam proses pembatalan (atau dipastikan akan segera dibatalkan).

Keterangan

Untuk informasi selengkapnya, lihat Pembatalan.

eksekusi

Menjadwalkan tugas pada task_group objek. Jika objek task_handle diteruskan sebagai parameter ke run, pemanggil bertanggung jawab untuk mengelola siklus hidup objek task_handle. Versi metode yang mengambil referensi ke objek fungsi sebagai parameter melibatkan alokasi timbunan di dalam runtime yang mungkin berkinerja kurang baik daripada menggunakan versi yang mengambil referensi ke task_handle objek. Versi yang mengambil parameter _Placement menyebabkan tugas menjadi bias untuk dieksekusi di lokasi yang ditentukan oleh parameter tersebut.

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

_Fungsi
Jenis objek fungsi yang akan dipanggil untuk mengeksekusi isi dari penanganan tugas.

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

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

_Task_handle
Sebuah pegangan untuk pekerjaan yang dijadwalkan. Perhatikan bahwa penelepon memiliki tanggung jawab atas masa pakai objek ini. Runtime akan terus mengharapkan objek task_group ini tetap hidup sampai salah satu dari metode wait atau run_and_wait telah dipanggil.

Keterangan

Runtime menjadwalkan fungsi kerja yang disediakan untuk dijalankan di kemudian waktu, yang dapat terjadi setelah fungsi pemanggil selesai. 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 teruskan ke metode ini tidak akan muncul di salinan objek fungsi tersebut. Selain itu, pastikan bahwa masa pakai objek apa pun yang Anda lewati oleh penunjuk atau dengan referensi ke fungsi kerja tetap valid hingga fungsi kerja kembali.

Jika task_group dihapus sebagai hasil dari stack unwinding akibat pengecualian, Anda tidak perlu memastikan bahwa panggilan telah dilakukan ke metode wait atau run_and_wait. Dalam hal ini, destruktor akan dengan tepat membatalkan dan menunggu tugas yang diwakili oleh parameter _Task_handle hingga selesai.

Metode ini menghasilkan pengecualian invalid_multiple_scheduling jika handle tugas yang diberikan oleh parameter _Task_handle telah dijadwalkan ke dalam objek grup tugas melalui metode run, dan tidak ada panggilan intervensi dilakukan ke metode wait atau run_and_wait pada grup tugas tersebut.

run_and_wait

Menjadwalkan tugas yang akan dijalankan langsung dalam konteks panggilan dengan bantuan objek task_group untuk dukungan pembatalan secara penuh. Fungsi kemudian menunggu hingga semua pekerjaan pada task_group objek telah selesai atau dibatalkan. Jika objek task_handle diteruskan sebagai parameter ke run_and_wait, pemanggil bertanggung jawab untuk mengelola siklus hidup objek task_handle.

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

_Fungsi
Jenis objek fungsi yang akan dipanggil untuk menjalankan isi tugas.

_Task_handle
Pegangan ke tugas yang akan dijalankan secara langsung dalam konteks pemanggilan. Perhatikan bahwa penelepon memiliki tanggung jawab atas masa pakai objek ini. Runtime akan terus mengharapkannya hidup sampai metode run_and_wait selesai dieksekusi.

_Func
Fungsi yang akan dipanggil untuk memanggil isi 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 dilemparkan dari salah satu tugasnya. Untuk informasi selengkapnya, lihat task_group_status.

Keterangan

Perhatikan bahwa satu atau beberapa tugas yang dijadwalkan ke objek ini task_group dapat dijalankan secara langsung dalam konteks pemanggilan.

Jika satu atau beberapa tugas yang dijadwalkan ke objek ini task_group memunculkan pengecualian, runtime akan memilih satu pengecualian tersebut dan meneruskannya dari pemanggilan metode run_and_wait.

Setelah dikembalikan dari run_and_wait metode pada task_group objek, runtime mengatur ulang objek ke status bersih di mana dapat digunakan kembali. Ini termasuk kasus di mana task_group objek telah dibatalkan.

Dalam jalur eksekusi normal, Anda wajib memanggil metode ini atau metode wait sebelum destruktor task_group dieksekusi.

kelompok_tugas

Membuat objek baru task_group .

task_group();

task_group(
   cancellation_token _CancellationToken
);

Parameter

_CancellationToken
Token pembatalan untuk dikaitkan dengan grup tugas ini. Grup tugas akan dibatalkan ketika token dibatalkan.

Keterangan

Konstruktor yang menerima token pembatalan membuat task_group yang akan dibatalkan ketika sumber yang terkait dengan token tersebut 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.

~kelompok_tugas

Menghancurkan objek task_group . Anda diharapkan untuk memanggil metode wait atau run_and_wait pada objek sebelum destruktor dijalankan, kecuali jika destruktor dijalankan sebagai hasil dari penyusutan tumpukan karena pengecualian.

~task_group();

Keterangan

Jika destruktor berjalan sebagai hasil dari eksekusi normal (misalnya, bukan pembongkaran stack karena pengecualian) dan baik metode wait maupun run_and_wait tidak dipanggil, destruktor dapat melemparkan pengecualian missing_wait.

tunggu

Menunggu hingga 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 dilemparkan dari salah satu tugasnya. Untuk informasi selengkapnya, lihat task_group_status.

Keterangan

Perhatikan bahwa satu atau beberapa tugas yang dijadwalkan ke objek ini task_group dapat dijalankan secara langsung dalam konteks pemanggilan.

Jika satu atau beberapa tugas yang dijadwalkan ke objek ini task_group memunculkan pengecualian, runtime akan memilih satu pengecualian tersebut untuk dipropagasikan dan menyebarkannya keluar pada metode wait.

Memanggil wait pada objek task_group mengatur ulang ke status bersih sehingga dapat digunakan kembali. Ini termasuk kasus di mana objek task_group dibatalkan.

Dalam jalur eksekusi yang normal, Anda diharuskan untuk memanggil metode ini atau metode run_and_wait sebelum destruktor task_group dieksekusi.

Lihat juga

Namespace layanan konkurensi
Kelas structured_task_group
task_handle Class