Basically if the set if immutable (always read only) of course your OK.
For a shared (say static) set access by more then one at a time, you must deal with thread-safety.
But it's not hard.
Design to minimize the need for this, but if you must, control the access points. Don't expose the collection, wrap it in a singleton which provides 'results' from say Linq queries which themsves are immutable.
But then you might need auto-syncronization for 'dirty results' you gave to someone. A harder but not impossible issue. There are just so many nightmares here that it makes sense not to do it on this amazingly central and 'generic' base Collection<T>. Want a special threadsafe one? Inherit from Collection<T> and it is much easier.
For more email me or go to: http://blog.domaindotnet.com