Chinaunix首页 | 论坛 | 博客
  • 博客访问: 35618
  • 博文数量: 28
  • 博客积分: 368
  • 博客等级: 一等列兵
  • 技术积分: 270
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-13 17:41
文章分类

全部博文(28)

文章存档

2022年(2)

2020年(3)

2017年(1)

2016年(5)

2015年(1)

2012年(4)

2011年(11)

2010年(1)

我的朋友

分类: C/C++

2020-04-11 16:24:16

    由于对C++中Map的细节注意不够,导致使用过程中,出现问题,具体描述如下:
    问题描述:多个线程同时访问同一个Map,一个是添加,一个是读取,出现的现象是Map中存在对象,但是对象为空。
    原因分析:添加线程首先判断Map中是否存在对象,如果不存在,则创建,读取线程直接读取Map对象,访问方式采用下表的方式 Map[index],而Map通过下标访问,有一个默认的处理方式,就是如果不存在,则默认置为空,这样导致添加线程误以为对象已经存在,将不进行添加操作,而读取线程读到的对象一直为空,造成应用无法正常运行。
    总结:查找元素是否存在,不能用数组下标方式,应该使用 find ,添加元素应该采用数据下标方式,这样元素如果存在,则覆盖,用 insert 方式则不能覆盖,需要判断返回值是否成功。
阅读(500) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~