多執行緒程式設計透過並行執行任務提升效率,使用 C++ 標準執行緒函式庫實作多執行緒步驟如下:使用 std::thread 建立一個線程,傳入可呼叫物件(lambda 函式或函式指標)作為建構函式參數。透過呼叫 join() 方法等待執行緒終止,阻塞主執行緒直到子執行緒完成執行。實戰案例:並行計算素數,將計算範圍分配給多個執行緒並等待其完成,合併結果後列印素數列表。
使用 C++ 標準執行緒庫實作多執行緒程式設計
多執行緒程式設計透過並行執行多個任務來提高程式效率。本文將介紹如何使用 C++ 標準執行緒函式庫輕鬆實作多執行緒編程,並透過實戰案例進行說明。
建立線程
要建立線程,可以使用std::thread
類,它接收一個可呼叫物件的參考作為其建構函數的參數。可呼叫物件通常是一個 lambda 函數或一個函數指標。例如:
// 定义一个函数指针 void thread_function() { // ... 执行此线程应执行的任务 } // 创建线程 std::thread t(thread_function);
等待執行緒終止
建立執行緒後,主執行緒可以透過呼叫 join()
方法等待其終止。 join()
方法將阻塞主線程,直到稱為子執行緒的建立執行緒完成其執行。例如:
// 等待子线程完成 t.join();
實戰案例:並行計算素數
#讓我們透過一個實戰案例來示範多執行緒程式設計。我們將編寫一個程序,使用多個執行緒並行計算給定範圍內的質數。
#include <iostream> #include <vector> #include <thread> bool is_prime(int n) { if (n < 2) { return false; } for (int i = 2; i <= n / 2; ++i) { if (n % i == 0) { return false; } } return true; } std::vector<int> find_primes(int start, int end) { std::vector<int> primes; for (int i = start; i <= end; ++i) { if (is_prime(i)) { primes.push_back(i); } } return primes; } int main() { int start = 1; int end = 1000000; int num_threads = 4; // 分配计算范围 int range_size = (end - start) / num_threads; std::vector<std::thread> threads; std::vector<std::vector<int>> primes_list; for (int i = 0; i < num_threads; ++i) { int thread_start = start + i * range_size; int thread_end = thread_start + range_size - 1; threads.emplace_back(std::thread(find_primes, thread_start, thread_end)); } // 等待线程完成并合并结果 for (auto& thread : threads) { std::vector<int> primes; thread.join(); thread.get(primes); primes_list.push_back(primes); } std::vector<int> primes; for (auto& list : primes_list) { primes.insert(primes.end(), list.begin(), list.end()); } // 打印素数列表 for (int prime : primes) { std::cout << prime << " "; } std::cout << std::endl; return 0; }
執行程式將輸出給定範圍內的所有質數。
注意:本教學示範了使用 C++ 標準執行緒函式庫進行多執行緒程式設計的基本概念和實戰應用。對於更高級的功能和最佳實踐,建議參考 C++ 標準庫文件和線上資源。
以上是如何使用 C++ 標準執行緒庫實作多執行緒程式設計?的詳細內容。更多資訊請關注PHP中文網其他相關文章!