C++11中引入了thread类,使用它可以很方便的创建线程.创建的形式为thread t(函数名, 参数…),执行完此行代码,线程函数就直接运行起来了,不需要单独的启动函数.不过主线程中仍然需要join()来等待子线程运行完毕
此外C++11中还引入了async函数,是一种更高层的异步方式.它不必显式手写join函数来让主线程等待子线程.它可以用std::future类型的变量来接收线程函数运行的结果,并通过get()的方法来获得结果.这样就不必像thread那样提前定义一个全局变量,在线程函数中进行赋值操作. 此外async还可以指定线程创建策略–是立马执行还是延迟执行.
举个简单的例子对比下:
#include <iostream>
#include <chrono>
#include <thread>
#include <future>
using namespace std;
int sum = 0;
int add(int a, int b)
{
sum = a + b;
return sum;
}
int main()
{
thread t(add, 2, 3);
t.join();
cout << "sum: " << sum << endl;
auto f = async(add, 3, 4);
cout << "result: " << f.get() << endl;
}
执行结果:
sum: 5
result: 7
参考文章: https://www.cnblogs.com/qicosmos/p/3534211.html