21xrx.com
2024-11-25 03:18:54 Monday
登录
文章检索 我的文章 写文章
C++多线程创建方法
2023-07-09 11:59:44 深夜i     --     --
C++ 多线程 创建方法

C++是一种广泛使用的编程语言,其优秀的多线程支持使得它成为一种应用广泛的语言。相比其他编程语言,C++的多线程模型更具有灵活性、可扩展性和高效性。那么,该如何在C++中创建多线程呢?

首先,C++的标准库提供了一个thread类来帮助我们创建多线程。在创建一个线程时,我们需要传递一个可调用对象(比如函数、函数对象、lambda表达式等)和其对应的参数。下面是一个简单的示例:


#include <iostream>

#include <thread>

void foo(int n) {

  std::cout << "foo is running in thread " << std::this_thread::get_id() << " with parameter " << n << std::endl;

}

int main() {

  std::thread t(foo, 42);

  std::cout << "main is running in thread " << std::this_thread::get_id() << std::endl;

  t.join();

  return 0;

}

在以上示例中,我们创建了一个名为“t”的线程,它的可调用对象是函数foo,并且传入了参数“42”。除此之外,我们还在主线程中输出了一句话。上述程序的输出结果如下:


main is running in thread 14356

foo is running in thread 22752 with parameter 42

我们可以看到,在程序中同时运行了两个线程,一个是主线程,一个是t线程。在foo函数中,我们打印出了线程的id和传入的参数。

除了使用thread类,我们还可以使用C++11标准库中的其他功能来创建多线程。其中,最常用的是std::async函数。这个函数会返回一个std::future对象,它可以被用来获取异步操作的结果。下面是一个使用std::async的示例:


#include <iostream>

#include <future>

int add(int a, int b) {

  std::cout << "add is running in thread " << std::this_thread::get_id() << std::endl;

  return a + b;

}

int main() {

  std::future<int> result = std::async(add, 1, 2);

  std::cout << "main is running in thread " << std::this_thread::get_id() << std::endl;

  std::cout << "Result is: " << result.get() << std::endl;

  return 0;

}

在上述示例中,我们使用std::async创建了一个异步任务,并传入了参数1和2。此时任务在一个新的线程中运行,并在子线程中计算了1+2,最终返回结果3。在主线程中,我们使用std::future对象的get函数来获取异步任务的运行结果。上述程序的输出结果如下:


main is running in thread 14516

add is running in thread 21088

Result is: 3

除了上面这些用于创建多线程的基本方法外,C++标准库还提供了许多其他的多线程功能,如std::mutex、std::condition_variable、std::atomic等等。使用这些功能能够更加灵活、高效地管理多线程任务。对于C++多线程的学习,这些都是必不可少的知识。

总之,多线程在今天的程序设计中扮演了重要的角色,它们能够有效地提高程序的性能和响应能力,也能够帮助程序更好地利用多核CPU的性能。在C++中使用多线程创建方法多种多样,仅仅是上文提到的简单一例,读者可以结合相关文档及学习资料进行深入学习和实践。

  
  

评论区

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