std::thread lambda
时间: 2023-06-21 20:14:55 浏览: 49
这是一个使用 C++11 标准中的 std::thread 类创建线程并执行 lambda 表达式的示例:
```c++
#include <iostream>
#include <thread>
int main() {
int value = 0;
// 创建一个线程并执行 lambda 表达式
std::thread t([&value]() {
std::cout << "子线程开始执行" << std::endl;
value = 100;
std::cout << "子线程执行完毕" << std::endl;
});
// 等待子线程执行完毕
t.join();
std::cout << "value = " << value << std::endl;
return 0;
}
```
该示例中,创建了一个子线程并执行了一个 lambda 表达式,该表达式将 value 变量的值设置为 100。在主线程中调用 join() 方法等待子线程执行完毕后,输出 value 的值。
相关问题
std::thread lambda表达式
std::thread是C++11引入的线程库,可以用于创建线程。lambda表达式是一种匿名函数的写法,在std::thread中可以使用lambda表达式作为线程的入口函数。lambda表达式可以在其内部访问外部变量,并且可以通过捕获列表来指定如何捕获这些变量。
在引用的代码中,可以看到lambda表达式的捕获列表中使用了[*this],表示传递到lambda中的是this对象的拷贝。这样做的好处是,在lambda函数执行期间,即使原始对象已经被销毁,lambda函数仍然可以访问到拷贝的this对象。
在引用的代码中,lambda表达式没有使用捕获列表,因此在lambda函数内部无法访问外部变量。
总结:std::thread可以使用lambda表达式作为线程的入口函数,并且可以通过捕获列表来指定如何捕获外部变量。
C++ std::thread lambda
C++11 引入了 std::thread 类,可以用于创建新线程。使用 lambda 表达式可以方便地在线程中执行函数。
例如,以下代码创建了一个新线程并执行 lambda 表达式:
```
#include <iostream>
#include <thread>
int main() {
std::thread t([](){
std::cout << "Hello from thread!" << std::endl;
});
t.join();
return 0;
}
```
输出:
```
Hello from thread!
```
在 lambda 表达式中,我们可以访问外部变量,但需要注意线程安全问题。