首頁 >後端開發 >C++ >C++並發程式設計:如何進行執行緒終止和取消?

C++並發程式設計:如何進行執行緒終止和取消?

WBOY
WBOY原創
2024-05-06 14:12:01904瀏覽

C 中執行緒終止和取消機制包括:執行緒終止:std::thread::join() 阻塞目前執行緒直到目標執行緒完成執行;std::thread::detach() 從執行緒管理中分離目標執行緒。執行緒取消:std::thread::request_termination() 請求目標執行緒終止執行;std::thread::get_id() 取得目標執行緒 ID,可與 std::terminate() 一起使用,立即終止目標執行緒。實戰中,request_termination() 允許執行緒決定終止時機,join() 確保在主執行緒退出前工作執行緒完成執行。需要注意,線程取消並不總是被尊重,終止線程可能會導致未定義行為。

C++並發程式設計:如何進行執行緒終止和取消?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn