なぜこれが 4 回に 1 回の実行でクラッシュするのか興味があります。
スレッド ID を含む文字列を返す単純なクラスがあります。このクラスは、別のクラス内からラムダで非同期に呼び出され、結果を返します。コードは私ができる限り単純です - 私はまだ学んでいます:
class String_Returner
{
public:
string run() const
{
return "I returned from thread "+to_string(this_thread::get_id());
}
};
class Class_Holder
{
public:
Class_Holder() : number_of_runs(10)
{
srs.resize(number_of_runs);
}
void concurrent_srs()
{
for (int i = 0; i < number_of_runs; i++)
{
results.push_back(async([&]{return srs[i].run();}));
}
for (int i = 0; i < results.size(); i++)
{
cout << i << ") " << results[i].get() << endl;
}
results.clear();
}
private:
vector<future<string>> results;
vector<String_Returner> srs;
const int number_of_runs;
};
void class_b_test()
{
Class_Holder ch;
ch.concurrent_srs();
}
参照で async を使用するのは危険だと認識していますが、何も書き込まれていない場合は安全だと考えました。私のエラーはおそらくラムダ自体に起因すると思います。これは主に async とラムダの機能をテストするためのプログラムです。
私の主な質問: 1) なぜクラッシュするのですか? 2)これを行うためのより良い方法は何ですか?