vector配合多线程的bug
来源:互联网 发布:linux echo 颜色 编辑:程序博客网 时间:2024/05/21 11:12
近日加利福尼亚大学同学来访问,写的程序core了,帮忙调试好半天。。纪录一下奇葩的bug。
起始bug的原因挺容易想到的,而且也是写代码的时候应该注意的地方。应为vector内存动态增长的原因,vector中的元素的指针和引用都是不可靠的。当然这一点在单线程时基本没有问题。但是多线程就跪了。
多线程传给线程函数一个vector中元素的指针,而主线程会改这个vector,导致线程函数需要用vector中元素时,这块内存已经不是vector的了,动态增长使得vector开了新空间,复制数据,释放旧空间。然后就报了错。。
下面是简化版的代码,原始代码很大,导致没能一眼看出来这个问题。
g++ -std=c++11 a.cpp -lpthread
#include <iostream>#include <vector>#include <thread>using namespace std;struct node { virtual void f() const{ cout << "f()" << endl; } node(int a = -1): a(a) { cout << "con" << endl; } node(const node &t): a(t.a){ cout << "copy con" << endl; } int a = 0;};void doSomething(node *n) { n->f();}int main(int argc, char* argv[]) { vector<node> x; vector<thread> thrs; for(int i = 0; i < 2; ++i) { x.push_back(node()); thrs.push_back(thread(doSomething, &x[x.size()-1])); } for(thread &x: thrs) { x.join(); } return 0;}
0 0
- vector配合多线程的bug
- VECTOR-BUG
- 一个关于多线程池任务配合的项目的总结
- 多线程Vector
- python中多进程和多线程的配合使用
- bug of vector
- 为什么vector的remove_if实际上并没有删除元素,而要配合erase使用
- 标准C++库vector类erase方法的小bug
- 一个多线程示例程序的BUG修复
- 多线程环境下libcurl的一个Bug
- c++多线程使用printf输出的bug
- 多线程访问共享数据的Bug
- cocos2dx3.4的多线程bug严重
- mousedown和blur配合使用时,ie6/7/8的bug
- hadoop-2.2.0配合hive-0.12.0使用orc存储引发的bug
- 与本地程序相关的一个bug------要配合利用date命令观察才好!
- vector和qsort配合问题定位总结
- 《游戏编程入门》源代码子画面销毁bug与vector容器vector::erase的问题
- 怎么将pdf转换成word的效果达到最好
- 正则表达式入门
- iOS 下 实现手写签名(OC)
- 数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历
- Trie/最短的名字
- vector配合多线程的bug
- POJ1661 神坑卧槽!!
- Java 读写Properties配置文件
- redhat 6 配置yum源
- javaWEb中的分页处理
- Android 5.x 权限问题解决方法
- python MySQL 写入excel
- 一、还原项目之前的状态(不小心删除必要的文件代码)以及动态获取新浪微博授权码
- golang: 常用数据类型底层结构分析