Penyertaan dan Pemisahan std::thread
Cipta bebenang dengan std::thread dan pilih antara join dengan detach.
Penyertaan dan Pemisahan std::thread ialah pelajaran C++ Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran C++ Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.
Kelas std::thread
Pengepala <thread> memperkenalkan benang kepada pustaka standard dalam C++11. Setiap tika std::thread mewakili satu benang OS.
Mencipta Benang
Luluskan pemanggil (fungsi, lambda atau funktor) kepada pembina. Benang mula berjalan serta-merta.
#include <thread>
#include <iostream>
void worker() { std::cout << "running on thread\n"; }
int main() {
std::thread t(worker);
t.join(); // wait for it to finish
}Meluluskan Argumen
Hantar argumen kepada pemanggil melalui pembina.
std::thread t([](int n) { std::cout << n; }, 42);
t.join();Meluluskan melalui Rujukan
Gunakan std::ref untuk meluluskan argumen melalui rujukan. Tanpanya, benang menerima salinan.
int counter = 0;
std::thread t([](int& c) { ++c; }, std::ref(counter));
t.join();
std::cout << counter; // 1join(): Menunggu Penyelesaian
Panggil join() untuk menyekat benang pemanggil sehingga sasaran selesai. Selepas join, benang itu tidak lagi boleh disertai.
detach(): Berjalan Secara Bebas
Panggil detach() untuk menjalankan benang secara bebas. Benang itu terus berjalan selepas std::thread dimusnahkan. Sumber dilepaskan oleh OS apabila benang tamat.
std::thread t([]() { /* background work */ });
t.detach(); // we no longer track itjoinable()
Semak sama ada benang boleh disertai atau dipisahkan. Benang yang telah disertai atau dipisahkan tidak lagi boleh disertai.
Terlupa Menyertai: Penamatan
Jika std::thread dimusnahkan ketika masih boleh disertai, atur cara memanggil std::terminate. Sentiasa sertai atau pisahkan benang sebelum pemusnahan.
Pembungkus RAII
Tulis pembungkus RAII kecil yang menyertai benang dalam pemusnah. Atau gunakan std::jthread (C++20) — ia menyertai benang secara automatik.
#include <thread>
// C++20
std::jthread t([] { /* work */ });
// t joins automatically when destroyedKeserentakan Perkakasan
Dapatkan bilangan benang perkakasan dengan std::thread::hardware_concurrency(). Gunakannya untuk menentukan saiz kumpulan benang.
ID Benang
Setiap benang mempunyai ID unik. Dapatkan ID benang semasa dengan std::this_thread::get_id().
Menidurkan Benang
Gunakan std::this_thread::sleep_for(duration) untuk menjeda benang semasa.
#include <chrono>
using namespace std::chrono_literals;
std::this_thread::sleep_for(500ms);Semakan Pantas
Apakah yang berlaku jika std::thread yang boleh disertai dimusnahkan sebelum join() atau detach() dipanggil?
Imbas Kembali
Cipta benang dengan std::thread dan pemanggil. Sentiasa panggil join() atau detach() sebelum objek benang dimusnahkan — atau gunakan std::jthread (C++20) yang menyertai benang secara automatik.
Pelajari C++ dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 51
- Pelajaran
- 203
Soalan Lazim
Adakah pelajaran “Penyertaan dan Pemisahan std::thread” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran C++ Academy, termasuk “Penyertaan dan Pemisahan std::thread”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Penyertaan dan Pemisahan std::thread”?
Cipta bebenang dengan std::thread dan pilih antara join dengan detach. Anda berlatih C++ Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan C++ Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran C++ Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “Penyertaan dan Pemisahan std::thread” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Penyertaan dan Pemisahan std::thread
- std::mutex, lock_guard dan unique_lock
- Pemboleh Ubah Keadaan dan Corak Pekerja
- Asas std::async dan std::future