`

多线程操作stl::map引起的数据不一致问题的解决过程与方法

 
阅读更多

昨天晚上业务出现了一次core dump,今天早上来check生产环境的core文件的堆栈内容如下:



得到栈的内容如下:




找到#5对应的源码为:


找到#4对应的源码为:


找到#3对应的源码:


分析到这里,我们可以看到,在红黑树的insert_unique操作中,没有走到 if (__position._M_node == _M_end())分支,而是到了 else if (...)的分支。标明该key值在map中已经存在了,此次插入的结果就是改变key对应的value值。而在生产环境上的log里显示该key值已经被drop了,如果插入应该走第一个 if 分支。


因此只有一种情况,就是因为多线程引起的数据不一致问题。在需要维护map的代码段加上:


即可,其中m_mutex为:




分享到:
评论

相关推荐

    Windows下C++多线程SOCKET服务代码

    <br>大家都知道网关程序即SOCKET通讯多线程程序,其中当然用到SOCKET;网关中有SOCKET服务端, 也有SOCKET客户端;作为SOCKET服务端时,需要接收远程主机的连接,当远程主机请求连接, 根据业务需要首先要...

    基于QT(C++)和epoll+MySQL实现的聊天室【100012860】

    客户端涉及到的技术点:常用QT控件(QWidget, QListWidget, QLabel, QPushButton)、QT信号与槽、QJsonObject完成json数据的解析、QT多线程、QTcpSocket连接服务器、服务端涉及到的技术点; epoll多路IO转接机制:常用...

    浅谈c++ stl迭代器失效的问题

    下面小编就为大家带来一篇浅谈c++ stl迭代器失效的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,祝大家游戏愉快哦

    Widnows环境C++多线程网关程序

    <br>大家都知道网关程序即SOCKET通讯多线程程序,其中当然用到SOCKET;网关中有SOCKET服务端, 也有SOCKET客户端;作为SOCKET服务端时,需要接收远程主机的连接,当远程主机请求连接, 根据业务需要首先要...

    safe-map:安全的

    有几种方法可以解决此问题。 例如,英特尔的TBB包含多个“线程安全”容器。 不幸的是,您会发现它们对保留迭代器也不起作用-它们仅确保原子操作。 另一种选择是跳过使用迭代器,仅存储密钥。 但这意味着每次您要...

    多线程leetcode-study_resources:学习资源

    多线程leetcode 面试作品集 我的简介 准备计划 C/C++ 编程 话题 C编程书籍 数据结构 研究 STL 结构和 API,它是如何实现的,当调用特定的 API 时编译器做了什么,复杂性,局限性,草率的代码如何破坏它,如何有效地...

    深入解析C++ STL中的常用容器

    里我们不涉及容器的基本操作之类,只是要讨论一下各个容器其各自的特点。STL中的常用容器包括:顺序性容器(vector、deque、list)、关联容器(map、set)、容器适配器(queue、stac)

    iocp服务器客户端混合框架

    //好能标志一个连接,比如,客户端列表的某个节点的指针,假设用STL中的MAP来维护客户端列表,那么用KEY作为返回值也不错。) long _stdcall ioc_call_connect(HIOC hIoc,HINT s,long u_addr,long u_port,long flag) ...

    传智播客扫地僧视频讲义源码

    本教程共分为5个部分,第一部分是C语言提高部分,第二部分为C++基础部分,第三部分为C++进阶部分,第四部分为C、C++及数据结构基础部分,第五部分为C_C++与设计模式基础,内容非常详细. 第一部分 C语言提高部分目录...

    UIRepo++:C ++的用户界面存储库-开源

    通常,将应用程序数据与实际的窗口控件分离开是很有帮助的,其结果将是更优雅,更易于维护的设计。 UIRepo是使用标准模板库(STL)构造的小型C ++类。 它使用unordered_map类存储类型为bool,int,double,string或...

    PaperTest Q&A笔试综述

    5)多进程与多线程的区别….17 6)死锁 17 7〕)进程与线程 18 2. fork ““““““““““““““ 18 3. Linux…………… 20 4, RAID 21 5.测试…. 1面 道面准 21 6.堆栈数据代码区 …22 7.文件...

    Visual C++ 编程资源大全(英文源码 表单)

    72.zip Extension to the STL find_if and for_each 扩充STL库(5KB)<END><br>73,73.zip Change from child window to popup window (and back) 将一个子窗口改成弹出式窗口(5KB)<END><br>74,74.zip ...

Global site tag (gtag.js) - Google Analytics