首页  >  文章  >  后端开发  >  如何使用 C++ 标准线程库实现多线程编程?

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

WBOY
WBOY原创
2024-06-04 19:36:00587浏览

多线程编程通过并行执行任务提升效率,使用 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn