Maison >développement back-end >C++ >Comment implémenter la programmation multithread en C++ en utilisant STL ?
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.
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 destd::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 :🎜rrreeeCe 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!