c++ - 多线程中vector push_back问题

浏览:28日期:2023-05-10

问题描述

创建线程

pthread_t threads[2]; MinPath minpath[2]; Path* path[2]; for (int j = 0; j < 2; ++j) {path[j] = new Path();printf('In main: creating thread %dn', j);searchParam param ;param.minpath = &minpath[j];pthread_create(&threads[j], NULL, search_thread, (void *)&param); }

Path构造函数

struct Path{ vector<int>* nodes; Path();};Path::Path(){ nodes = new vector<int>; nodes->resize(10);}

注意 两个线程使用的是一个数组的两个元素最为参数

vector<int>* nodes = path->nodes; nodes->push_back(4);

1.虽然说是多线程,但两个线程没有共享变量2.偶尔出错3.每次都是这里有错,是不是应该每次resize一下,我试了一下好像不行4.出错函数调用栈信息如下:

c++ - 多线程中vector push_back问题

问题解答

回答1:

不知道你的search_thread里是怎么操作vector的,不过感觉这里有点问题:

pthread_create(&threads[j], NULL, search_thread, (void *)&param);

这个param有可能在线程启动之前就被释放或者重用,所以在search_thread里看到的可能不是你指定的那个param了。

回答2:

两个线程同时执行上面的代码?这指向的是同一个内存啊,

回答3:

要给多点代码才行,现在看不懂。。

相关文章: