Kelas structured_task_group

Kelas ini structured_task_group mewakili kumpulan pekerjaan paralel yang sangat terstruktur. Anda dapat mengantrekan tugas-tugas paralel individual pada structured_task_group dengan menggunakan objek task_handle, dan menunggu hingga selesai, atau membatalkan grup tugas sebelum selesai dieksekusi, yang akan membatalkan semua tugas yang belum mulai dieksekusi.

Sintaks

class structured_task_group;

Anggota

Konstruktor Publik

Nama Deskripsi
kelompok_tugas_terstruktur Kelebihan beban. Membuat objek baru structured_task_group .
~structured_task_group Destructor Menghancurkan objek structured_task_group . Anda diharapkan untuk memanggil metode wait atau run_and_wait pada objek sebelum destruktor dijalankan, kecuali destruktor dijalankan sebagai akibat dari pembongkaran tumpukan akibat 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 structured_task_group (meskipun tindakan tersebut tentu memenuhi syarat untuk mengembalikan true). Mungkin saja objek structured_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 structured_task_group , true akan dikembalikan juga.
jalankan Kelebihan beban. Menjadwalkan tugas pada structured_task_group objek. Pemanggil mengelola masa pakai objek task_handle yang diteruskan dalam parameter _Task_handle. 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 structured_task_group untuk dukungan pembatalan secara penuh. Jika objek task_handle diteruskan sebagai parameter ke run_and_wait, pemanggil bertanggung jawab untuk mengelola siklus hidup objek task_handle. Fungsi kemudian menunggu hingga semua pekerjaan pada structured_task_group objek telah selesai atau dibatalkan.
Tunggu Menunggu hingga semua pekerjaan pada structured_task_group telah selesai atau dibatalkan.

Keterangan

Ada sejumlah pembatasan ketat yang ditempatkan pada penggunaan structured_task_group objek demi mendapatkan performa.

  • Satu structured_task_group objek tidak dapat digunakan oleh beberapa utas. Semua operasi pada objek structured_task_group harus dilakukan oleh utas yang membuat objek tersebut. Dua pengecualian untuk aturan ini adalah fungsi anggota cancel dan is_canceling. Objek mungkin tidak berada dalam daftar pengambilan ekspresi lambda dan digunakan dalam tugas, kecuali tugas menggunakan salah satu operasi pembatalan.

  • Semua tugas yang dijadwalkan ke structured_task_group objek dijadwalkan melalui penggunaan task_handle objek yang harus Anda kelola secara eksplisit masa pakainya.

  • Beberapa grup hanya dapat digunakan dalam urutan yang benar-benar bersarang secara hierarkis. Jika dua structured_task_group objek dideklarasikan, objek kedua yang dinyatakan (yang dalam) harus dihancurkan sebelum metode apa pun kecuali cancel atau is_canceling dipanggil pada yang pertama (yang luar). Kondisi ini berlaku baik dalam kasus hanya sekadar mendeklarasikan beberapa structured_task_group objek dalam cakupan yang sama atau bersarang secara fungsional, maupun dalam kasus tugas yang diantrekan ke structured_task_group melalui metode run atau run_and_wait.

  • Tidak seperti kelas umum task_group , semua negara bagian di structured_task_group kelas bersifat final. Setelah Anda mengantrekan tugas ke grup dan menunggu tugas selesai, Anda mungkin tidak menggunakan grup yang sama lagi.

Untuk informasi selengkapnya, lihat Paralelisme Tugas.

Hierarki Pewarisan

structured_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 structured_task_group (meskipun tindakan tersebut tentu memenuhi syarat untuk mengembalikan true). Mungkin saja objek structured_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 structured_task_group , true akan dikembalikan juga.

bool is_canceling();

Tampilkan Nilai

Indikasi apakah objek structured_task_group sedang dalam proses pembatalan (atau dipastikan akan segera dibatalkan).

Keterangan

Untuk informasi selengkapnya, lihat Pembatalan.

eksekusi

Menjadwalkan tugas pada structured_task_group objek. Pemanggil mengelola masa pakai objek task_handle yang diteruskan dalam parameter _Task_handle. Versi yang mengambil parameter _Placement menyebabkan tugas menjadi bias untuk dieksekusi di lokasi yang ditentukan oleh parameter tersebut.

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

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

Parameter

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

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

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

Keterangan

Runtime membuat salinan fungsi kerja yang Anda teruskan ke metode ini. Setiap perubahan status yang terjadi dalam objek fungsi yang Anda teruskan ke metode ini tidak akan muncul di salinan objek fungsi tersebut.

Jika structured_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.

Melemparkan pengecualian invalid_multiple_scheduling jika handel tugas yang diberikan oleh _Task_handle parameter telah dijadwalkan ke suatu objek grup tugas melalui metode run dan belum ada panggilan intervensi 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 structured_task_group untuk dukungan pembatalan secara penuh. Jika objek task_handle diteruskan sebagai parameter ke run_and_wait, pemanggil bertanggung jawab untuk mengelola siklus hidup objek task_handle. Fungsi kemudian menunggu hingga semua pekerjaan pada structured_task_group objek telah selesai atau dibatalkan.

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 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 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 structured_task_group dapat dijalankan secara langsung dalam konteks pemanggilan.

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

Setelah fungsi ini kembali, structured_task_group objek dipertimbangkan dalam status akhir dan tidak boleh digunakan. Perhatikan bahwa penggunaan setelah metode run_and_wait kembali akan mengakibatkan perilaku yang tidak terdefinisi.

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

kelompok_tugas_terstruktur

Membuat objek baru structured_task_group .

structured_task_group();

structured_task_group(cancellation_token _CancellationToken);

Parameter

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

Keterangan

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

~kelompok_tugas_terstruktur

Menghancurkan objek structured_task_group . Anda diharapkan untuk memanggil metode wait atau run_and_wait pada objek sebelum destruktor dijalankan, kecuali destruktor dijalankan sebagai akibat dari pembongkaran tumpukan akibat pengecualian.

~structured_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 structured_task_group telah 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 structured_task_group dapat dijalankan secara langsung dalam konteks pemanggilan.

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

Setelah fungsi ini kembali, structured_task_group objek dipertimbangkan dalam status akhir dan tidak boleh digunakan. Perhatikan bahwa pemanfaatan setelah metode wait mengembalikan akan mengakibatkan perilaku yang tidak terdefinisi.

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

Lihat juga

Namespace layanan konkurensi
Kelas task_group
task_handle Class