Maison >développement back-end >C++ >Comment créer et gérer des threads en C++ ? Quels sont les mécanismes de synchronisation des threads ?
Les threads en C++ Les threads sont des unités d'exécution légères qui permettent la programmation simultanée. Utilisez la classe std::thread pour créer des threads et maintenir la cohérence des données partagées via des mécanismes de synchronisation tels que les mutex, les variables de condition et les verrous tournants. Le cas pratique montre le processus d'utilisation de threads pour calculer la somme simultanément.
Les threads sont des unités d'exécution légères qui partagent le même espace d'adressage avec les processus, permettant une programmation simultanée.
En C++, utilisez la classe std::thread
pour créer un thread :
#include <thread> void thread_function() { // 执行线程任务 } int main() { std::thread thread(thread_function); thread.join(); // 阻塞主线程,直到线程执行完毕 return 0; }
Pour maintenir la cohérence des données partagées entre les threads, vous devez utiliser un mécanisme de synchronisation :
#include <mutex> std::mutex mutex; void thread_function() { std::lock_guard<std::mutex> lock(mutex); // 对共享数据进行操作 }
#include <condition_variable> std::condition_variable cv; std::mutex cv_mutex; void thread_function() { std::unique_lock<std::mutex> lock(cv_mutex); cv.wait(lock, [] { return condition_is_met; }); // 条件满足时,继续执行 }
#include <atomic> std::atomic_flag spinlock = ATOMIC_FLAG_INIT; void thread_function() { while (spinlock.test_and_set(std::memory_order_acquire)); // 对共享数据进行操作 spinlock.clear(std::memory_order_release); }
Calcul et sommation simultanés
#include <thread> #include <vector> std::mutex sum_mutex; long long sum = 0; void add_numbers(const std::vector<int>& numbers) { for (int num : numbers) { std::lock_guard<std::mutex> lock(sum_mutex); sum += num; } } int main() { std::vector<std::thread> threads; std::vector<int> numbers = {...}; // 要相加的数字列表 // 创建并执行线程 for (size_t i = 0; i < std::thread::hardware_concurrency(); i++) { threads.emplace_back(add_numbers, numbers); } // 等待所有线程结束 for (auto& thread : threads) { thread.join(); } std::cout << "Sum: " << sum << std::endl; return 0; }
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!