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

多线程编程通过并行执行任务提升效率,使用 c++++ 标准线程库实现多线程步骤如下:使用 std::thread 创建线程,传入可调用对象(lambda 函数或函数指针)作为构造函数参数。通过调用 join() 方法等待线程终止,阻塞主线程直至子线程完成执行。实战案例:并行计算素数,将计算范围分配给多个线程并等待其完成,合并结果后打印素数列表。

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

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

多线程编程通过并行执行多个任务来提高程序效率。本文将介绍如何使用 C++ 标准线程库轻松实现多线程编程,并通过实战案例进行说明。

创建线程

立即学习“C++免费学习笔记(深入)”;

要创建线程,可以使用 std::thread 类,它接收一个可调用对象的引用作为其构造函数的参数。可调用对象通常是一个 lambda 函数或一个函数指针。例如:

// 定义一个函数指针void thread_function() {  // ... 执行此线程应执行的任务}// 创建线程std::thread t(thread_function);

等待线程终止

创建线程后,主线程可以通过调用 join() 方法等待其终止。join() 方法将阻塞主线程,直到称为子线程的创建线程完成其执行。例如:

// 等待子线程完成t.join();

实战案例:并行计算素数

让我们通过一个实战案例来演示多线程编程。我们将编写一个程序,使用多个线程并行计算给定范围内的素数。

#include #include #include 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 find_primes(int start, int end) {  std::vector 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 threads;  std::vector<std::vector> 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 primes;    thread.join();    thread.get(primes);    primes_list.push_back(primes);  }  std::vector 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++ 标准线程库实现多线程编程?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1452513.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月18日 05:08:45
下一篇 2025年12月18日 05:09:05

相关推荐

发表回复

登录后才能评论
关注微信