c++ map find方法源码解析1.背景2.map源码3.结论
1.背景最近,发生了一次奇怪的问题:用const char*作为map的key,定制比较器(采用strcmp实现),同时用了多线程的技术,在map.find()时候有几率发生死循环,通过windbg调试定位问题,发现是在map.find()时候发生了死循环,进而导致执行该过程的线程拿到锁了,但无法释放,后续其他线程一直等待该锁,从而发生假的“死锁”(实际为死循环)。结合map的源码、对应DMP文件的堆栈和相关变量额值(主要为发生死循环的map)以及map的数据结构来分析死循环的原因。2.