📅  最后修改于: 2023-12-03 15:13:54.512000             🧑  作者: Mango
在 C++11 中,引入了 lambda 表达式,可以方便地创建匿名函数。同时,C++11 还引入了 std::thread 库,可以创建线程。在这篇文章中,我们将结合 lambda 和 std::thread 库,来演示如何创建一个简单的线程。
lambda 表达式是一个匿名函数,能够快速、简便地定义函数对象。它的基本形式如下:
[capture-list] (parameter-list) mutable(optional) exception-specifier(optional) -> return-type(optional)
{
// 函数体
}
其中,capture-list 表示捕获列表,可以用来捕获变量;parameter-list 表示参数列表;mutable 关键字表示捕获变量可以在 lambda 表达式中被修改;exception-specifier 表示异常规定;return-type 表示返回值类型。
比如,下面这个 lambda 表达式表示计算两个整数之和:
auto sum = [](int a, int b) -> int { return a + b; };
std::thread 库可以创建一个新的线程,它的基本形式如下:
std::thread t(function, args...);
其中,function 是一个函数对象,args 是传递给函数的参数列表。比如,下面这个例子创建了一个新的线程,调用了一个简单的函数:
#include <iostream>
#include <thread>
void func()
{
std::cout << "Hello, world!" << std::endl;
}
int main()
{
std::thread t(func);
t.join(); // 等待线程结束
return 0;
}
下面是一个简单的 lambda 线程示例。它创建了一个新的线程,计算了一个数的平方。
#include <iostream>
#include <thread>
int main()
{
int x = 10;
std::thread t([&x]() {
int y = x * x;
std::cout << "The square of " << x << " is " << y << std::endl;
});
t.join(); // 等待线程结束
return 0;
}
在这个例子中,我们创建了一个 lambda 表达式,它捕获了变量 x,然后在新线程中计算了 x 的平方,并输出结果。注意,在 lambda 表达式中,我们使用了 &x 捕获变量 x 的引用,在新线程中使用 x 的值。同时,我们还需要在主线程中等待新线程执行完毕,才能关闭程序。