21xrx.com
2024-12-22 21:22:24 Sunday
登录
文章检索 我的文章 写文章
C++11中线程的使用
2023-07-04 08:52:45 深夜i     --     --
C++ 线程 C++11 多线程 并发编程

C++11引入了多线程支持,使得在C++中使用多线程变得更加容易。线程是一种由操作系统管理的执行线索,可以同时运行多个线程,提高程序的效率和并发性。

要使用C++11中的线程,需要包含 头文件。下面是一个基本的示例:


#include <iostream>

#include <thread>

void hello()

  std::cout << "Hello from thread!" << std::endl;

int main()

{

  std::thread t(hello);

  t.join();

  return 0;

}

上面的代码创建了一个新的线程,并在线程中执行hello()函数。主线程调用t.join()等待新线程执行完毕。

需要注意的是,线程的创建和销毁都需要时间和系统资源,在程序中不应该频繁地创建和销毁线程。相反,应该将需要并行执行的任务划分为较小的子任务,在一个线程中执行多个子任务。

C++11还提供了一些辅助类和函数,更方便地使用线程,例如std::thread::detach(),std::thread::joinable(),std::thread::yield()等。

除了std::thread,C++11还引入了std::async和std::future两个类,可以更方便地执行异步任务和获取结果。

下面是一个简单的使用std::async的示例:


#include <iostream>

#include <future>

int sum(int x, int y)

{

  return x + y;

}

int main()

{

  std::future<int> f = std::async(sum, 1, 2);

  int result = f.get();

  std::cout << "sum result: " << result << std::endl;

  return 0;

}

上面的代码使用std::async异步执行sum函数,并返回一个std::future对象,可以用于获取sum函数的返回值。f.get()等待sum函数执行完毕,并返回函数的返回值。如果sum函数出现异常,get()将会抛出异常。

总之,C++11中的线程支持可以让程序更高效、更灵活地执行并行任务,需要注意线程的创建和销毁的开销,以及正确使用辅助类和函数。

  
  

评论区

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