Pengaturcaraan Serentak C++: Bagaimana untuk melakukan penamatan dan pembatalan benang?

WBOY
Lepaskan: 2024-05-06 14:12:01
asal
892 orang telah melayarinya

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?

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;
}
Salin selepas log masuk

要点

  • request_termination() 允许工作线程决定何时终止自身。
  • join()
  • std::thread::detach(): Tanggalkan thread sasaran daripada pengurusan thread. Urutan akan terus dilaksanakan tetapi tidak lagi boleh diakses melalui objek std::threadnya.

Pembatalan benang

  • std::thread::request_termination(): Meminta urutan sasaran untuk menamatkan pelaksanaan. Urutan boleh memutuskan sama ada untuk memenuhi permintaan ini.
  • std::thread::get_id(): Dapatkan ID urutan sasaran, yang boleh dihantar ke fungsi std::terminate(). Ini segera menamatkan benang sasaran.
🎜🎜🎜Kes Praktikal🎜🎜🎜Pertimbangkan contoh di mana dua utas dicipta: utas utama dan utas pekerja. Urutan pekerja melaksanakan gelung tak terhingga sementara utas utama menunggu input pengguna dan kemudian menamatkan utas pekerja: 🎜rrreee🎜🎜Points🎜🎜🎜🎜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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan