Dasar std::async dan std::future
Jalankan tugas secara asinkron dan ambil hasilnya melalui std::future
Dasar std::async dan std::future adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.
Tugas Asinkron
std::async menjalankan fungsi secara asinkron dan mengembalikan std::future yang menyediakan hasilnya. Ini merupakan alternatif tingkat tinggi untuk mengelola utas secara manual.
Penggunaan Dasar
Berikan objek yang dapat dipanggil beserta argumennya. std::async mengembalikan std::future<Result>.
#include <future>
int compute() { return 42; }
std::future<int> f = std::async(compute);
int result = f.get(); // blocks until doneKebijakan Peluncuran
Argumen pertama mengendalikan kapan tugas dijalankan:
std::launch::async— memulai utas baru segerastd::launch::deferred— menjalankan secara sinkron saatget()dipanggil- Bawaan (tanpa kebijakan) — dipilih oleh implementasi
auto f = std::async(std::launch::async, compute);Metode std::future
Operasi umum:
get()— memblokir hingga selesai dan mengembalikan hasilnya (hanya sekali)wait()— memblokir, tetapi tidak mengembalikan hasilwait_for(d)/wait_until(t)— penantian berbatas waktuvalid()— apakah future ini sudah disiapkan?
Penerusan Pengecualian
Jika tugas asinkron melempar pengecualian, pengecualian tersebut disimpan dalam future dan dilemparkan kembali saat get() dipanggil.
auto f = std::async([] { throw std::runtime_error("oops"); });
try {
f.get();
} catch (const std::exception& e) {
std::cout << e.what();
}Mengembalikan Banyak Nilai
Bungkus hasilnya dalam tuple, struct, atau wadah.
auto f = std::async([] {
return std::make_pair(42, std::string("hello"));
});
auto [n, s] = f.get();Beberapa Tugas Secara Paralel
Luncurkan beberapa tugas asinkron dan tunggu semuanya selesai.
auto a = std::async(work_a);
auto b = std::async(work_b);
auto c = std::async(work_c);
std::cout << a.get() + b.get() + c.get();std::promise: Future Manual
Untuk pola produsen/konsumen ketika konsumen memerlukan future, tetapi produsen berada di utas lain, gunakan std::promise.
std::promise<int> p;
std::future<int> f = p.get_future();
std::thread t([&p] { p.set_value(42); });
std::cout << f.get();
t.join();std::packaged_task
Menggabungkan objek yang dapat dipanggil dengan future. Berguna ketika tugas dipanggil di tempat lain, misalnya di kumpulan utas.
shared_future
std::future hanya dapat dibaca sekali. std::shared_future memungkinkan beberapa pembaca—berguna untuk menyiarkan suatu hasil.
Perilaku Destruktor
Destruktor future yang dikembalikan oleh std::async dengan kebijakan bawaan dapat memblokir hingga tugas selesai. Perhatikan hal ini pada tugas yang berjalan lama.
Di Luar std::async
Untuk pemrograman asinkron tingkat produksi, pertimbangkan pustaka seperti Boost.Asio, Folly, atau pelaksana dan korutin C++20/23. std::async merupakan titik awal.
Pemeriksaan Singkat
Apa yang dilakukan saat .get() dipanggil pada std::future?
Ringkasan
std::async menjalankan fungsi secara asinkron; std::future yang dikembalikan menyediakan hasil dan meneruskan pengecualian. Gunakan kebijakan peluncuran untuk mengendalikan eksekusi. Untuk pola yang kompleks, gunakan std::promise dan std::packaged_task.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Dasar std::async dan std::future” gratis?
Ya — teks lengkap “Dasar std::async dan std::future” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Dasar std::async dan std::future”?
Jalankan tugas secara asinkron dan ambil hasilnya melalui std::future Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C++ Academy?
Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Dasar std::async dan std::future” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- std::thread: Menggabungkan dan Melepaskan
- std::mutex, lock_guard, dan unique_lock
- Variabel Kondisi dan Pola Pekerja
- Dasar std::async dan std::future