Bagaimana untuk melaksanakan pengaturcaraan berbilang benang dalam C++ menggunakan STL?

WBOY
Lepaskan: 2024-06-05 11:54:57
asal
788 orang telah melayarinya

Menggunakan STL untuk melaksanakan pengaturcaraan berbilang benang dalam C++ melibatkan: menggunakan std::thread untuk mencipta benang. Lindungi sumber kongsi menggunakan std::mutex dan std::lock_guard. Gunakan std::condition_variable untuk menyelaraskan keadaan antara urutan. Kaedah ini menyokong tugas serentak seperti penyalinan fail, di mana berbilang benang memproses blok fail secara selari.

如何在 C++ 中使用 STL 实现多线程编程?

Cara menggunakan STL untuk melaksanakan pengaturcaraan berbilang benang dalam C++

STL (Perpustakaan Templat Standard) menyediakan satu set primitif dan bekas konkurensi yang berkuasa untuk C++ yang boleh melaksanakan pengaturcaraan berbilang benang dengan mudah. Artikel ini menunjukkan cara menggunakan komponen utama dalam STL untuk mencipta aplikasi berbilang benang.

Menggunakan Benang

Untuk mencipta utas, gunakan kelas std::thread: std::thread 类:

std::thread t1(some_function);
t1.join(); // 等待线程完成
Salin selepas log masuk

some_function 是要并发执行的函数。

互斥量和锁

互斥量可用于防止多个线程同时访问共享资源。使用 std::mutex

std::mutex m;
{
    std::lock_guard<std::mutex> lock(m);
    // 在此处访问共享资源
} // 解除 m 的锁定
Salin selepas log masuk

条件变量

条件变量允许线程等待特定条件,例如当共享资源可用时。使用 std::condition_variable

std::condition_variable cv;
std::unique_lock<std::mutex> lock(m);
cv.wait(lock); // 等待 cv 信号
cv.notify_one(); // 唤醒一个等待线程
Salin selepas log masuk

some_function ialah fungsi yang akan dilaksanakan secara serentak.

Mutexes dan Locks

Mutexes boleh digunakan untuk menghalang berbilang benang daripada mengakses sumber kongsi pada masa yang sama. Menggunakan std::mutex: 🎜
#include <fstream>
#include <iostream>
#include <thread>
#include <vector>

void copy_file(const std::string& src, const std::string& dst) {
    std::ifstream infile(src);
    std::ofstream outfile(dst);
    outfile << infile.rdbuf();
}

int main() {
    std::vector<std::thread> threads;
    const int num_threads = 4;

    // 创建线程池
    for (int i = 0; i < num_threads; ++i) {
        threads.emplace_back(copy_file, "input.txt", "output" + std::to_string(i) + ".txt");
    }

    // 等待所有线程完成
    for (auto& t : threads) {
        t.join();
    }

    std::cout << "Files copied successfully!" << std::endl;
    return 0;
}
Salin selepas log masuk
🎜🎜Pembolehubah bersyarat🎜🎜🎜Pembolehubah bersyarat membenarkan urutan menunggu keadaan tertentu, seperti apabila sumber kongsi tersedia. Gunakan std::condition_variable: 🎜rrreee🎜🎜Kes praktikal: salinan fail berbilang benang🎜🎜🎜Kod berikut menunjukkan cara menggunakan STL untuk melaksanakan salinan fail berbilang benang:🎜rrreee

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pengaturcaraan berbilang benang dalam C++ menggunakan STL?. 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