One cannot safely access a container when it may be modified in another thread. Any number of threads can safely access a const (read-only) container. And a single thread can safely modify a container that it and only it owns.
NGen yes it would. One of the reasons they are not thread safe is so you can optimize them to the program so that they don't have to keep locking them all the time. Particularly if its only used in one thread. No one wants to lock the a container if its not being used across threads.
In many cases you can avoid locking by understanding how the particular algorithm your using on the container works.