最近面试老师被问到C++的 vector 和 map等STL 容器的线程安全问题,百度没有发现任何有用的答案。

甚至在腾讯、字节连续两次面试中我都没答出来让面试官满意的答案。

直到今天美团面试官的一问才让我恍然大悟。

他是在问完线程安全问题后,紧接着问那你知道迭代器失效吗?这我才意识过来,下面说下我的答案。

首先,肯定是不安全的。

原因如下:

   ① 用迭代器访问数组元素时,如果某个线程的 push_back 操作导致数组重新分配内存,那么就会导致迭代器失效

   ② 下标访问时,更不用说了,同时的写操作,或者写读等操作也可能出现脏数据

如何保证线程安全:

   ① 对于原因 ① 中的问题,我能想到的是,在知道数据量的时候可以 reserve 一下,预先分配足够的内存。 再就是对迭代器的使用要小心,迭代器要时刻更新。

   ② 对于 ② 中的问题,简单的加个锁应该就 OK 了 

以上是个人的思考,欢饮大家来讨论,望不吝赐教

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐