c++ - 多线程中vector push_back问题
本文介绍了c++ - 多线程中vector push_back问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
创建线程
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 %d\n", j);
searchParam param ;
param.minpath = &minpath[j];
pthread_create(&threads[j], NULL, search_thread, (void *)¶m);
}
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.出错函数调用栈信息如下:
解决方案
不知道你的search_thread里是怎么操作vector的,不过感觉这里有点问题:
pthread_create(&threads[j], NULL, search_thread, (void *)¶m);
这个param有可能在线程启动之前就被释放或者重用,所以在search_thread里看到的可能不是你指定的那个param了。
这篇关于c++ - 多线程中vector push_back问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文