这么说吧,所有的STL都不是线程安全的。使用时一定要小心,到时候崩溃的时候找bug都找不出来。
std::unordered_map<Key, Value>
是一个无法保证线程安全的数据结构,我们必须自己来处理它的并发访问。并发访问可以支持单个进程的写操作,或者多个进程的并发读操作。一般情况下我们可以把对Value的写操作,看做是一个对std::unordered_map<Key, Value>
的读操作,因为这个操作并不改变Key与Value的映射关系。operator[]
是一个十分需要小心使用的方法,因为它既可能对应一个读操作,也可能对应一个写操作,如果这个方法触发了插入行为,那么其中的元数据就会被修改,如果装载引子接近了上限值时还可能触发rehash,因此operator []
不应该并发的调用。