Вы правы в том, что некоторая форма блокировки необходима для записи, хотя просто запись не означает, что вам нужно lock() { }
каждый доступ к коллекции.
Как вы говорите, несинхронизированные версии встроенных коллекций являются поточно-безопасными только для чтения.Обычно ReadWriterLockSlim
используется для управления одновременным доступом в тех случаях, когда может происходить запись, поскольку он позволяет нескольким потокам получать доступ к коллекции, пока не выполняется запись, но только один поток (записывающее устройство) во время записи.