Maison  >  Article  >  développement back-end  >  Comment implémenter la programmation multithread en C++ en utilisant STL ?

Comment implémenter la programmation multithread en C++ en utilisant STL ?

WBOY
WBOYoriginal
2024-06-05 11:54:57745parcourir

Utiliser STL pour implémenter une programmation multithread en C++ implique : utiliser std::thread pour créer des threads. Protégez les ressources partagées à l'aide de std :: mutex et std :: lock_guard. Utilisez std::condition_variable pour coordonner les conditions entre les threads. Cette méthode prend en charge les tâches simultanées telles que la copie de fichiers, où plusieurs threads traitent les blocs de fichiers en parallèle.

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

Comment utiliser STL pour implémenter une programmation multithread en C++

STL (Standard Template Library) fournit un ensemble de primitives et de conteneurs de concurrence puissants pour C++ qui peuvent facilement implémenter une programmation multithread. Cet article montre comment utiliser les composants clés de STL pour créer des applications multithread.

Utilisation de Threads

Pour créer un fil de discussion, utilisez la classe std::thread : std::thread 类:

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

some_function 是要并发执行的函数。

互斥量和锁

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

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

条件变量

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

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

some_function est la fonction à exécuter simultanément.

Mutex et verrous

Les mutex peuvent être utilisés pour empêcher plusieurs threads d'accéder à une ressource partagée en même temps. Utilisation de 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;
}
🎜🎜Variables conditionnelles🎜🎜🎜Les variables conditionnelles permettent à un thread d'attendre une condition spécifique, par exemple lorsqu'une ressource partagée est disponible. Utilisez std::condition_variable : 🎜rrreee🎜🎜Cas pratique : copie de fichier multi-thread🎜🎜🎜Le code suivant montre comment utiliser STL pour implémenter une copie de fichier multi-thread :🎜rrreee

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn