Вам необходимо синхронизировать доступ к контейнеру, если несколько потоков обращаются к контейнеру и хотя бы один из этих потоков изменяет содержимое контейнера. Если ни один из потоков не изменяет содержимое контейнера, вам не нужно синхронизировать доступ к нему.
[Обратите внимание, что в стандарте языка C ++ не упоминаются потоки (по крайней мере, пока), поэтому совершенно необязательно, чтобы контейнеры можно было использовать из нескольких потоков. Тем не менее, то, что я сказал выше, верно по крайней мере для всех основных реализаций Стандартной библиотеки и является требованием в предстоящей редакции C ++ 0x к Стандарту языка C ++.]