首頁 > 後端開發 > C++ > 如何使用 C++ 標準執行緒庫實作多執行緒程式設計?

如何使用 C++ 標準執行緒庫實作多執行緒程式設計?

WBOY
發布: 2024-06-04 19:36:00
原創
614 人瀏覽過

多執行緒程式設計透過並行執行任務提升效率,使用 C++ 標準執行緒函式庫實作多執行緒步驟如下:使用 std::thread 建立一個線程,傳入可呼叫物件(lambda 函式或函式指標)作為建構函式參數。透過呼叫 join() 方法等待執行緒終止,阻塞主執行緒直到子執行緒完成執行。實戰案例:並行計算素數,將計算範圍分配給多個執行緒並等待其完成,合併結果後列印素數列表。

如何使用 C++ 标准线程库实现多线程编程?

使用 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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板