不矛盾,stl本身就不是thread safe的,标准说的是,在single thread情况下,插入以后,原先的iterator的确不是失效,还是指向原来的元素
DS说的是,在multi-thread读写同时操作的情况下,插入+维护iterator指向的工作并不是atomic的,所以老的iterator会看见中间状态,但是一旦维护iterator的工作完成,老的iterator还是指向原来的元素
【 在 cat201702 的大作中提到: 】
: 根据C++的std::map的文档说明,插入数据后不会导致迭代器和引用失效, 那么一个线程向一个std::map插入数据,而别一个线程向同一个std::map查找数据,这个std::map不加锁,是否会出现问题?
: deepseek的说法如下:
: 用户可能认为,因为迭代器不会失效,所以查找线程不会被中断。但实际上,插入操作可能修改内部结构,导致查找线程看到中间状态,破坏map的不变性。比如,红黑树的旋转操作可能会临时改变节点链接,此时查找可能会错误地访问节点。
: ...................
--
修改:ziqin FROM 183.128.142.*
FROM 183.128.142.*