0

次の構造に従うコードがあります。

//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 でこれをデバッグする方法が見つかりませんでした。

4

0 に答える 0