在 Linux 系統下,使用 C++ 編寫多線程程序需要用到 C++11 標準中的 <thread>
庫
#include <iostream>
#include <thread>
#include <vector>
// 函數示例:打印從 0 到 n-1 的整數
void print_numbers(int start, int end) {
for (int i = start; i < end; ++i) {
std::cout << "Thread ID: " << std::this_thread::get_id() << ", Number: "<< i << std::endl;
}
}
int main() {
const int num_threads = 4;
const int range = 10;
// 創建線程向量
std::vector<std::thread> threads;
// 計算每個線程需要處理的數字范圍
int range_per_thread = range / num_threads;
// 為每個線程分配任務
for (int i = 0; i < num_threads; ++i) {
int start = i * range_per_thread;
int end = (i == num_threads - 1) ? range : (i + 1) * range_per_thread;
threads.push_back(std::thread(print_numbers, start, end));
}
// 等待所有線程完成
for (auto& t : threads) {
t.join();
}
std::cout << "All threads finished." << std::endl;
return 0;
}
這個示例中,我們創建了一個名為 print_numbers
的函數,該函數接受兩個參數:要打印的數字范圍的起始值和結束值。在 main
函數中,我們創建了 4 個線程,并為每個線程分配了一個任務,使其打印從 0 到 9 的整數。最后,我們使用 join()
函數等待所有線程完成。
注意:在編譯時,需要使用 -std=c++11
或更高版本的編譯選項來啟用 C++11 支持。例如,使用 g++ 編譯器時,可以使用以下命令:
g++ -std=c++11 -pthread main.cpp -o main
這將生成一個名為 main
的可執行文件,可以運行它以查看多線程程序的效果。