次の構造に従うコードがあります。
//some const variables here
std::function<void(int threadID, NumericMatrix * mat)> threadT = [const1,const2](int threadID, NumericMatrix * mat) {
//a lot of variables defined inside lamdas
}
NumericMatrix * mat1 = new NumericMatrix(N, nEstimators);
std::thread t1( threadT, 1, mat1 );
NumericMatrix * mat2 = new NumericMatrix(N, nEstimators);
std::thread t2( threadT, 2, mat2 );
t1.join();
t2.join();
return;
実行しようとすると、多くのセグメンテーション違反エラーが発生しますが、スレッドを 1 つだけ実行しようとすると問題はありません。ミューテックスの問題はないと思います。両方のスレッドは、で定義された変数にのみアクセスしています
だから私は疑問に思います:それは、スレッドごとに同じラムダを再利用しているためですか? もしそうなら、どうすればこれを回避できますか? threadT のコピーを作成することによって (どのように)?
Obs .: R 内でコンパイルされているため、gdb でこれをデバッグする方法が見つかりませんでした。