Mekanisme penamatan dan pembatalan benang dalam C++ termasuk: Penamatan utas: std::thread::join() menyekat utas semasa sehingga utas sasaran menyelesaikan pelaksanaan; Pembatalan utas: std::thread::request_termination() meminta utas sasaran untuk menamatkan pelaksanaan; benang. Dalam amalan, request_termination() membenarkan thread untuk menentukan masa penamatan, dan join() memastikan bahawa worker thread menyelesaikan pelaksanaan sebelum thread utama keluar. Harap maklum bahawa pembatalan rangkaian tidak selalu dihormati dan penamatan rangkaian boleh mengakibatkan tingkah laku yang tidak ditentukan.
Pengaturcaraan Serentak C++: Bagaimana untuk melakukan penamatan dan pembatalan benang?
Dalam aplikasi berbilang benang, penamatan dan pembatalan benang adalah operasi penting apabila urutan tertentu atau tugasnya tidak lagi diperlukan. C++ menyediakan berbilang mekanisme untuk melaksanakan penamatan dan pembatalan utas:
Penamatan utas
std::thread::join()
: Menyekat utas semasa sehingga utas sasaran menyelesaikan pelaksanaan. std::thread::join()
:阻塞当前线程,直到目标线程完成执行。std::thread::detach()
:从线程管理中分离目标线程。线程将继续执行,但无法再通过其 std::thread
对象访问。线程取消
std::thread::request_termination()
:请求目标线程终止执行。线程可以决定是否尊重此请求。std::thread::get_id()
:获取目标线程的 ID,该 ID 可以传递给 std::terminate()
函数。这会立即终止目标线程。实战案例
考虑一个示例,其中创建了两个线程:主线程和工作线程。工作线程执行无限循环,而主线程等待用户输入,然后终止工作线程:
#include <iostream> #include <thread> void work_thread() { while (true) { // 无限循环 } } int main() { std::thread worker(work_thread); std::cout << "按回车键终止工作线程:" << std::endl; std::cin.get(); worker.request_termination(); worker.join(); return 0; }
要点
request_termination()
允许工作线程决定何时终止自身。join()
std::thread::detach()
: Tanggalkan thread sasaran daripada pengurusan thread. Urutan akan terus dilaksanakan tetapi tidak lagi boleh diakses melalui objek std::thread
nya. Pembatalan benang
std::thread::get_id()
: Dapatkan ID urutan sasaran, yang boleh dihantar ke fungsi std::terminate()
. Ini segera menamatkan benang sasaran. request_termination()
membenarkan urutan pekerja memutuskan masa untuk ditamatkan sendiri. 🎜🎜join()
memastikan bahawa urutan pekerja menyelesaikan pelaksanaan sebelum urutan utama keluar. 🎜🎜🎜🎜Nota🎜🎜🎜🎜Pembatalan benang tidak selalu dihormati, terutamanya jika benang melakukan bahagian kritikal atau operasi tanpa gangguan lain. 🎜🎜Menamatkan rangkaian boleh menyebabkan tingkah laku yang tidak ditentukan, jadi gunakan dengan berhati-hati. 🎜🎜Atas ialah kandungan terperinci Pengaturcaraan Serentak C++: Bagaimana untuk melakukan penamatan dan pembatalan benang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!