Стандарт C ++ 03 вообще не говорит о параллелизме, поэтому аспект параллелизма не рассматривается как деталь реализации для компиляторов. Поэтому в документации, прилагаемой к вашему компилятору, нужно искать ответы, связанные с параллелизмом.
Большинство реализаций STL не являются потокобезопасными как таковые.
Поскольку контейнеры STL не обеспечивают явной безопасности потоков, так что да, вам придется использовать собственный механизм синхронизации. И пока вы это делаете, вы должны использовать RAII вместо того, чтобы управлять ресурсом синхронизации (разблокировка мьютекса и т. Д.) Вручную.
Вы можете обратиться к документации здесь:
MSDN:
Если один объект записывается одним потоком, тогда все операции чтения и записи в этот объект в том же или других потоках должны быть защищены. Например, если для объекта A задан поток 1, записывающий данные в A, поток 2 должен быть запрещен для чтения или записи в A.
Документация GCC говорит:
В настоящее время мы используем определение безопасности потоков SGI STL , которое гласит:
Реализация SGL в STL является поточно-ориентированной только в том смысле, что одновременный доступ к отдельным контейнерам является безопасным, а одновременный доступ для чтения к совместно используемым контейнерам безопасен. Если несколько потоков обращаются к одному контейнеру и, по крайней мере, один поток потенциально может писать, то пользователь отвечает за обеспечение взаимного исключения между потоками во время доступа к контейнеру.
Обратите внимание: стандартная библиотека GCC является производной от кода STL SGI.