tbb的concurrent_hash_map出现异常

xutom2006 2011-03-30 09:21:05
大家好!

由于项目需要,我在程序中使用了 tbb,即 Intel Thread Building Blocks,这个在多线程编程中可以大大减少我们对于线程同步的工作量,就是我们几乎可以不需要考虑线程同步的问题了。但是在使用过程中,我碰到了 concurrent_hash_map 出现错误的情况。我的使用方法是这样的:
1. 每一个新创建的线程负责往全局变量 globalMap 中添加节点,然后进入一个循环中检测结束标志位,检测到标志位后从该全局变量 globalMap 中删除相应的节点
2. 一个线程遍历全局变量 globalMap 中的所有节点,并对每一个节点做相应的操作
...全文
554 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wz915495969 2012-08-03
  • 打赏
  • 举报
回复
你好。end() begin()是非线程安全的。
xutom2006 2011-04-02
  • 打赏
  • 举报
回复
是的,一般提示:0xC0000005:读取位置 0x00000004 时发生访问冲突 都是指针指错地方了。但是无从下手啊,不知道那边出了问题,因为我感觉我的使用方式应该是没有问题的,一个线程负责添加节点,然后定时循环判断条件成立则删除节点;另外一个线程遍历这个hashmap,然后执行。为什么会在这个hashmap的遍历过程中出错呢?
xubin_sh 2011-03-31
  • 打赏
  • 举报
回复
这一串指针中有一个错误的地址,你要看一下,那个是错误的地址
xubin_sh 2011-03-30
  • 打赏
  • 举报
回复
啥错误呢?
xutom2006 2011-03-30
  • 打赏
  • 举报
回复
不好意思,忘记把错误写上了。
错误出现在 concurrent_hash_map.h 的函数 advance_to_next_node 中,在语句 my_node = my_table->my_segment[my_segment_index].my_array[i].node_list 产生中断。出现异常为:在xxx.exe中的 0x004112a8 处未处理的异常:0xC0000005:读取位置 0x00000004 时发生访问冲突。

64,635

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧