C++容器(vector, map)的线程安全问题
C++容器(vector, map)的线程安全问题
·
最近面试老师被问到C++的 vector 和 map等STL 容器的线程安全问题,百度没有发现任何有用的答案。
甚至在腾讯、字节连续两次面试中我都没答出来让面试官满意的答案。
直到今天美团面试官的一问才让我恍然大悟。
他是在问完线程安全问题后,紧接着问那你知道迭代器失效吗?这我才意识过来,下面说下我的答案。
首先,肯定是不安全的。
原因如下:
① 用迭代器访问数组元素时,如果某个线程的 push_back 操作导致数组重新分配内存,那么就会导致迭代器失效
② 下标访问时,更不用说了,同时的写操作,或者写读等操作也可能出现脏数据
如何保证线程安全:
① 对于原因 ① 中的问题,我能想到的是,在知道数据量的时候可以 reserve 一下,预先分配足够的内存。 再就是对迭代器的使用要小心,迭代器要时刻更新。
② 对于 ② 中的问题,简单的加个锁应该就 OK 了
以上是个人的思考,欢饮大家来讨论,望不吝赐教
更多推荐
已为社区贡献1条内容
所有评论(0)