C 中執行緒終止和取消機制包括:執行緒終止:std::thread::join() 阻塞目前執行緒直到目標執行緒完成執行;std::thread::detach() 從執行緒管理中分離目標執行緒。執行緒取消:std::thread::request_termination() 請求目標執行緒終止執行;std::thread::get_id() 取得目標執行緒 ID,可與 std::terminate() 一起使用,立即終止目標執行緒。實戰中,request_termination() 允許執行緒決定終止時機,join() 確保在主執行緒退出前工作執行緒完成執行。需要注意,線程取消並不總是被尊重,終止線程可能會導致未定義行為。
C 並發程式設計:如何進行執行緒終止和取消?
在多執行緒應用程式中,當不再需要特定執行緒或其任務時,執行緒終止和取消是至關重要的操作。 C 提供了多種機制來實現執行緒終止和取消:
執行緒終止
#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()
確保在主執行緒退出之前工作執行緒完成執行。 注意事項
以上是C++並發程式設計:如何進行執行緒終止和取消?的詳細內容。更多資訊請關注PHP中文網其他相關文章!