В C # могут ли несколько потоков читать и записывать в словарь, если каждый поток имеет доступ только к одному элементу в словаре и никогда не обращается к другому?
Нет, словарь не является потокобезопасным.
За исключением изменения содержимого ссылочного типа (объекта), который хранится как значение в словаре.
В .NET 4 у нас будет System.Collections.Concurrent.ConcurrentDictionary.
System.Collections.Concurrent.ConcurrentDictionary
Нет, они не могут. словарь не является потокобезопасным:
Словарь (TKey, TValue) может поддерживать несколько читателей одновременно, как долго так как коллекция не изменена. Несмотря на это, перечисляя через коллекция изначально не потокобезопасная процедура. В редких случай, когда утверждается перечисление с доступом записи, коллекция должен быть заблокирован в течение всего перечисление. Разрешить сбор быть доступным для нескольких потоков для читать и писать, вы должны реализовать собственную синхронизацию.