Melalukan Argumen Rujukan Objek kepada Fungsi Benang: Mengatasi Ralat Penyusunan
Melalukan rujukan kepada objek perpustakaan standard C 11, seperti std::ostream , kepada fungsi benang boleh menghadapi masalah penyusunan. Ini kerana utas, secara lalai, menyalin hujahnya.
Untuk menghantar rujukan secara eksplisit, bungkusnya dengan std::ref atau std::cref untuk rujukan berterusan. Berikut ialah versi diubah suai bagi contoh yang disediakan:
void foo(std::ostream &os) { // Do something with os os << "This should be printed to os" << std::endl; } int main() { std::thread t(foo, std::ref(std::cout)); t.join(); // Wait for the thread to complete return 0; }
Dengan menggunakan std::ref, anda mencipta pembalut rujukan yang berkelakuan seperti objek nilai-semantik. Berbilang salinan pembungkus akan merujuk kepada rujukan asas yang sama, membenarkan utas mengakses objek std::ostream dengan betul.
Ingat untuk memastikan objek yang dirujuk kekal sah sepanjang hayat utas.
Atas ialah kandungan terperinci Bagaimana untuk Lulus Rujukan Objek Perpustakaan Standard C kepada Benang Tanpa Ralat Penyusunan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!