首頁  >  文章  >  後端開發  >  C++ Lambda 表達式如何應用於並發程式設計?

C++ Lambda 表達式如何應用於並發程式設計?

WBOY
WBOY原創
2024-06-05 15:18:21739瀏覽

Lambda 表達式在並發程式設計中的好處包括:簡化執行緒創建,作為執行緒函數;提高可讀性,封裝執行緒邏輯;支援資料並行,並發執行多個操作。

C++ Lambda 表达式如何应用于并发编程?

C++ Lambda 表達式在並發程式設計中的應用

Lambda 表達式是C++ 中的一種匿名函數,它可以大幅簡化程式碼編寫。當與並發程式設計結合時,Lambda 表達式可以提供以下好處:

  • #簡化執行緒建立: Lambda 表達式可以作為新執行緒的函數體,從而簡化執行緒創建過程。
  • 提高程式碼可讀性: Lambda 運算式可以將執行緒邏輯封裝成可重複使用的函數,提高程式碼的可讀性和維護性。
  • 支援資料並行: Lambda 運算式可以並行執行多個操作,實現資料並行程式設計。

實戰案例

使用Lambda 表達式建立執行緒:

#include <thread>

int main() {
  // 创建一个 Lambda 表达式作为线程函数
  auto func = []() { std::cout << "Hello from thread!" << std::endl; };

  // 使用 Lambda 表达式创建并启动线程
  std::thread t(func);
  t.join();

  return 0;
}

使用Lambda 表達式實作資料並行:

#include <algorithm>
#include <numeric>
#include <iostream>

int main() {
  // 创建一个整数向量
  std::vector<int> numbers = {1, 2, 3, 4, 5};

  // 使用 Lambda 表达式对向量中的元素并行求和
  int sum = std::reduce(std::execution::par_unseq, numbers.begin(), numbers.end(), 0,
                         std::plus<>());

  std::cout << "Sum of numbers: " << sum << std::endl;

  return 0;
}

使用Lambda 表達式處理執行緒異常:

#include <thread>

int main() {
  // 创建一个 Lambda 表达式作为线程函数
  auto func = [](int a, int b) {
    try {
      // 可能抛出异常的代码
      if (b == 0) {
        throw std::runtime_error("Division by zero");
      }
      return a / b;
    } catch (const std::exception& e) {
      std::cout << "Exception caught in thread: " << e.what() << std::endl;
    }
  };

  // 使用 Lambda 表达式创建并启动线程,指定异常处理函数
  std::thread t(func, 10, 2);
  t.join();

  // 使用 Lambda 表达式创建并启动线程,不指定异常处理函数
  std::thread t2(func, 10, 0);
  t2.join();

  return 0;
}

以上是C++ Lambda 表達式如何應用於並發程式設計?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn