我在 for 循环中有一个 lambda,在 lambda 中有循环变量参数。当我运行它时,我希望输出数字 0-9。但由于它是一个 lambda,x 不会立即得到评估。
for( int x = 0; x < n; ++x)
{
vec.push_back(thread{[&x](){
m.lock();
cout << x << endl;
m.unlock();
}});
}
输出:
0
3
3
9
等等
其他语言的解决方案是创建一个临时变量,
for( int x = 0; x < n; ++x)
{
int tmp = x;
vec.push_back(thread{[&tmp](){
m.lock();
cout << tmp << endl;
m.unlock();
}});
}
但这似乎不起作用。
请参阅接收错误参数的线程
奖金:
在我寻找答案的过程中,我偶然发现了这个问题 Generalizing C++11 Threads class to work with lambda ,它建议不要使用会使迭代器失效的容器。为什么会这样/