📜  c++ lambda 线程示例 - C++ (1)

📅  最后修改于: 2023-12-03 15:13:54.512000             🧑  作者: Mango

C++ Lambda 线程示例

在 C++11 中,引入了 lambda 表达式,可以方便地创建匿名函数。同时,C++11 还引入了 std::thread 库,可以创建线程。在这篇文章中,我们将结合 lambda 和 std::thread 库,来演示如何创建一个简单的线程。

lambda 表达式

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 库可以创建一个新的线程,它的基本形式如下:

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;
}
C++ Lambda 线程示例

下面是一个简单的 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 的值。同时,我们还需要在主线程中等待新线程执行完毕,才能关闭程序。