Текущая версия стандарта (C ++ 03) даже не поддерживает потоки, поэтому тот факт, что контейнеры STL являются потокобезопасными или нет, полностью зависит от конкретной реализации.
В вашем случае вам следует обратиться к этой странице MSDN, в которой говорится, что
Один объект является поточно-ориентированным для чтения из нескольких потоков. Например, для объекта A безопасно считывать A из потока 1 и из потока 2 одновременно.
Если один объект записывается одним потоком, то все операции чтения и записи в этот объект в том же или других потоках должны быть защищены. Например, если для объекта A задан поток 1, записывающий в A, то поток 2 должен быть запрещен для чтения или записи в A.
Таким образом, вы должны защищать свои операции чтения / записи с помощью мьютекса или другого примитива синхронизации. Вы можете найти мультиплатформенную и C ++-дружественную реализацию их в Boost.Thread (кстати, это библиотека, на которой основана поддержка потоков в C ++ 0x).
<ч />
Кстати, если вам когда-либо приходилось использовать предыдущую версию VC ++ (например, 2003), помните, что в этих версиях доступна как многопоточная, так и однопоточная версия стандартной библиотеки. Никогда не следует использовать однопоточную версию CRT, если вы используете потоки и средства CRT в своем приложении, всегда проверяйте в настройках проекта, чтобы убедиться, что выбрана правильная версия.