Heim >Backend-Entwicklung >C++ >Wie erstelle und verwalte ich Threads in C++? Welche Thread-Synchronisationsmechanismen gibt es?
Threads in C++ Threads sind leichte Ausführungseinheiten, die gleichzeitige Programmierung ermöglichen. Verwenden Sie die Klasse std::thread, um Threads zu erstellen und die Konsistenz gemeinsam genutzter Daten durch Synchronisierungsmechanismen wie Mutexe, Bedingungsvariablen und Spinlocks aufrechtzuerhalten. Der praktische Fall zeigt den Prozess der gleichzeitigen Berechnung der Summe mithilfe von Threads.
Threads sind leichte Ausführungseinheiten, die den gleichen Adressraum mit Prozessen teilen und so eine gleichzeitige Programmierung ermöglichen.
Verwenden Sie in C++ die std::thread
-Klasse, um einen Thread zu erstellen:
#include <thread> void thread_function() { // 执行线程任务 } int main() { std::thread thread(thread_function); thread.join(); // 阻塞主线程,直到线程执行完毕 return 0; }
Um die Konsistenz gemeinsamer Daten zwischen Threads aufrechtzuerhalten, müssen Sie einen Synchronisationsmechanismus verwenden:
#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); }
Gleichzeitige Berechnung und Summierung
#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; }
Das obige ist der detaillierte Inhalt vonWie erstelle und verwalte ich Threads in C++? Welche Thread-Synchronisationsmechanismen gibt es?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!