forループ内にラムダがあり、ラムダにループ変数パラメーターがあります。実行すると、0〜9の数字が出力されると思います。ただし、ラムダであるため、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();
}});
}
しかし、それはうまくいかないようです。
間違ったパラメータを受け取るスレッドを参照してください
ボーナス:
答えを探しているときに 、イテレータを無効にするコンテナを使用しないことを推奨するラムダで動作するようにC ++11スレッドクラスを一般化するというこの質問に出くわしました。なぜだろう/