C 中的執行緒執行緒是輕量級的執行單元,可實現並發程式設計。使用 std::thread 類別建立線程,並透過互斥鎖、條件變數和自旋鎖等同步機制維護共享資料的一致性。實戰案例展示了使用線程並發計算求和的過程。
執行緒是輕量級的執行單元,與進程共享相同位址空間,可實現並發程式設計。
在C 中,使用std::thread
類別建立執行緒:
#include <thread> void thread_function() { // 执行线程任务 } int main() { std::thread thread(thread_function); thread.join(); // 阻塞主线程,直到线程执行完毕 return 0; }
為維護執行緒之間的共享資料一致性,需要使用同步機制:
#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); }
並發計算求和
#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; }
以上是C++ 中如何建立和管理執行緒?有哪些線程同步機制?的詳細內容。更多資訊請關注PHP中文網其他相關文章!