Dou*_* T. 13
不,C++规范不保证任何STL容器上的操作规范中的线程安全性.如果线程安全很重要,您应该提供自己的锁定.
话虽这么说,不同的实现似乎提供了不同的保证.例如,大多数似乎允许多个并发读取器,只要不同时执行写入.如果您不关心可移植性,可以研究实现的文档.例如,从这里为SGI STL:
STL的SGI实现仅在对不同容器的同时访问是安全的意义上是线程安全的,并且对共享容器的同时读取访问是安全的.如果多个线程访问单个容器,并且至少有一个线程可能写入,则用户负责确保在容器访问期间线程之间的互斥.
从这个答案来看,Dinkumware似乎也提出了类似的保证(他们制作了微软的STL实现).
多个线程可以安全地读取相同的容器对象.(容器对象中有nunprotected mutable子对象.)
两个线程可以安全地操作相同类型的不同容器对象.(容器类型中没有不受保护的共享静态对象.)
如果至少有一个线程正在修改对象,则必须防止同时访问容器对象.(明显的同步原语,例如Dinkum线程库中的原语,不会被容器对象破坏.)