std::thread: Menggabungkan dan Melepaskan
Buat thread dengan std::thread dan pilih antara join atau detach
std::thread: Menggabungkan dan Melepaskan adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.
Kelas std::thread
Header <thread> memperkenalkan dukungan utas ke pustaka standar dalam C++11. Setiap instans std::thread mewakili satu utas OS.
Membuat Utas
Berikan objek yang dapat dipanggil (fungsi, lambda, funktor) kepada konstruktor. Utas mulai berjalan segera.
#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
}Meneruskan Argumen
Teruskan argumen kepada objek yang dapat dipanggil melalui konstruktor.
std::thread t([](int n) { std::cout << n; }, 42);
t.join();Meneruskan melalui Referensi
Gunakan std::ref untuk meneruskan argumen melalui referensi. Tanpanya, utas 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 memblokir utas pemanggil hingga utas sasaran selesai. Setelah join, utas tersebut tidak lagi dapat digabungkan.
detach(): Berjalan Secara Mandiri
Panggil detach() agar utas berjalan secara mandiri. Utas tersebut terus berjalan setelah std::thread dihancurkan. Sumber daya dilepaskan oleh OS ketika utas berakhir.
std::thread t([]() { /* background work */ });
t.detach(); // we no longer track itjoinable()
Periksa apakah utas dapat digabungkan atau dilepas. Utas yang telah digabungkan atau dilepas tidak lagi dapat digabungkan.
Lupa Melakukan Join: Terminasi
Jika std::thread dihancurkan saat masih dapat digabungkan, program memanggil std::terminate. Selalu lakukan join atau detach sebelum penghancuran.
Pembungkus RAII
Tulislah pembungkus RAII kecil yang melakukan join di destruktor. Atau gunakan std::jthread (C++20)—objek tersebut melakukan join secara otomatis.
#include <thread>
// C++20
std::jthread t([] { /* work */ });
// t joins automatically when destroyedKonkurensi Perangkat Keras
Periksa jumlah utas perangkat keras dengan std::thread::hardware_concurrency(). Gunakan hasilnya untuk menentukan ukuran kumpulan utas.
ID Utas
Setiap utas memiliki ID unik. Dapatkan ID utas saat ini dengan std::this_thread::get_id().
Menidurkan Utas
Gunakan std::this_thread::sleep_for(duration) untuk menjeda utas saat ini.
#include <chrono>
using namespace std::chrono_literals;
std::this_thread::sleep_for(500ms);Pemeriksaan Singkat
Apa yang terjadi jika std::thread yang masih dapat digabungkan dihancurkan sebelum join() atau detach() dipanggil?
Ringkasan
Buat utas dengan std::thread dan objek yang dapat dipanggil. Selalu lakukan join() atau detach() sebelum objek utas dihancurkan—atau gunakan std::jthread (C++20) yang melakukan join otomatis.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “std::thread: Menggabungkan dan Melepaskan” gratis?
Ya — teks lengkap “std::thread: Menggabungkan dan Melepaskan” 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 “std::thread: Menggabungkan dan Melepaskan”?
Buat thread dengan std::thread dan pilih antara join atau detach 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 1 dari 4.
Berapa lama pelajaran “std::thread: Menggabungkan dan Melepaskan” 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