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