21xrx.com
2024-05-20 03:41:01 Monday
登录
文章检索 我的文章 写文章
C++11多线程循环打印1到10
2023-07-13 22:53:39 深夜i     --     --
C++11 多线程 循环打印 1到10 并发编程

在C++11中,我们可以使用标准库提供的多线程库实现多线程的功能,让程序同时运行多个线程。在这里,我们将介绍如何使用C++11多线程库循环打印1到10的数字。

首先,我们需要包含C++11的多线程库头文件“ ”,以及需要使用的一些标准库头文件。然后,我们定义一个打印数字的函数“print_number”,如下所示:


void print_number(int n)

  std::cout << n << std::endl;

这个函数接受一个整数参数n,将其打印到控制台上。接下来,我们创建一个循环来依次调用print_number函数打印1到10的数字。在单线程的情况下,我们可以很简单地写出如下代码:


for (int i = 1; i <= 10; i++) {

  print_number(i);

}

但是,这个循环只会在单个线程上运行,无法实现多线程的效果。为了实现多线程,我们需要使用std::thread库提供的std::thread类来创建新的线程。

std::thread类的构造函数接受一个函数对象作为参数。我们可以使用C++11的lambda表达式来创建一个函数对象,如下所示:


for (int i = 1; i <= 10; i++) {

  std::thread t([=]{ print_number(i); });

  t.join();

}

这个循环中,我们创建了一个新的线程t,使用lambda表达式将print_number函数和参数i捕获到函数对象中。然后,我们调用t.join()方法,等待线程t执行完毕。

但是,这个代码有一个问题:每次循环都会创建一个新的线程,并等待它执行完毕,这会导致程序阻塞。为了避免这个问题,我们可以将线程创建和启动的过程放在循环外面,如下所示:


std::thread threads[10];

for (int i = 0; i < 10; i++) {

  threads[i] = std::thread([=]{ print_number(i+1); });

}

for (int i = 0; i < 10; i++) {

  threads[i].join();

}

这个代码中,我们先定义了一个std::thread数组threads来保存每个线程。然后,我们使用一个循环创建了10个新的线程,并将它们保存到threads数组中。在第二个循环中,我们等待所有线程执行完毕。

经过测试,上述代码可以实现循环打印1到10的数字的功能,并且可以在多个线程上同时运行,大大提高了程序的执行效率。

总之,C++11的多线程库提供了方便易用的多线程编程接口,让程序员可以轻松地实现多线程的效果。在实际开发中,我们可以根据需要选择合适的多线程方法,以提高程序的性能和可靠性。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复