C++;多线程运行时错误:已调用abort() 我编写了一个C++程序,从时间n=168到0,根据值w(t+1)计算向后w(t)。W(t)是具有负指数的三维修正向量。我选择运行k-multi-thread来填充Wt[k][I][j]中的值。单线程版本工作正常,但在多线程上运行时失败,出现报告_runtime_错误:“abort()已被调用。”(来自主线程)。我试图检查线程窗口,但没有找到多少线索。有人能帮助/指导我如何调试吗
(i) 如何告诉我哪个工作线程在哪个步骤导致错误 (ii)我应该在调试模式中设置一些断点吗C++;多线程运行时错误:已调用abort() 我编写了一个C++程序,从时间n=168到0,根据值w(t+1)计算向后w(t)。W(t)是具有负指数的三维修正向量。我选择运行k-multi-thread来填充Wt[k][I][j]中的值。单线程版本工作正常,但在多线程上运行时失败,出现报告_runtime_错误:“abort()已被调用。”(来自主线程)。我试图检查线程窗口,但没有找到多少线索。有人能帮助/指导我如何调试吗,c++,multithreading,vector,C++,Multithreading,Vector,(i) 如何告诉我哪个工作线程在哪个步骤导致错误 (ii)我应该在调试模式中设置一些断点吗 // class ForwardShootingGrid was created as a modified 3D vector to cater negative index ForwardShootingGrid Wt; ForwardShootingGrid Wtp1; // as a worker thread void ComputeGridValue_LayerK(int n, int
// class ForwardShootingGrid was created as a modified 3D vector to cater negative index
ForwardShootingGrid Wt;
ForwardShootingGrid Wtp1;
// as a worker thread
void ComputeGridValue_LayerK(int n, int i_max, int j_max, int k) {
......
for (int i = -i_max; i <= i_max; i++) {
for (int j = -j_max; j <= j_max; j++) {
......
x = ...... // x depends on value from ForwardShootingGrid Wtp1
Wt.AssignGridValue(k, i, j, x); // to input value=x into Wt[k][i][j]
......
}
}
}
// as a Main thread
int main(int, char*[]) {
for (int n = n_max - 1; n >= 0; n--) { // n is somehow like the time index
i_max = n;
j_max = n;
k_max = ...
// Everytime copy ForwardShootingGrid Wt to Wtp1, and then recompute Wt which is based on value from Wtp1
Wtp1 = Wt;
// resize Wt
Wt.ResizeGrid(0, k_max, -i_max, i_max, -j_max, j_max);
for (int k = 0; k <= k_max; k++) {
oThreads[k] = std::thread(ComputeGridValue_LayerK, n, i_max, j_max, k);
}
for (int k = 0; k <= k_max; k++) {
oThreads[k].join();
}
}
//类ForwardShootingGrid被创建为一个修改的3D向量,以满足负索引的需要
转发网格Wt;
转发网格Wtp1;
//作为工作线程
void ComputeGridValue_LayerK(int n,int i_max,int j_max,int k){
......
对于(int i=-i_max;我只在有关工具本身的问题上使用Visual Studio标记(不适用于一般编程问题)。是否AssignGridValue
线程安全?是否oThreads
至少k+1
元素大?调用abort
时调用堆栈是什么?@Cameron:谢谢你的回答。(i)但是我尝试在simular编码中使用vector,它工作得很好(当多个线程更新同一个vector时)。(ii)调用堆栈似乎暗示主线程正在调用Abort()错误。(iii)我如何判断哪个工作线程导致了断点?我应该在调试模式中设置一些断点吗?