Почему бы не использовать LinkedList
класс.
В документации сказано, что она не является поточно-ориентированной, поэтому вам нужно синхронизировать доступ к списку для себя, но вы должны делать это с любой структурой данных, доступ к которой осуществляется несколькими потоками.
Производительность должна быть тихой, хорошо вот что msdn говорит о вставке узлов в любую позицию:
LinkedList предоставляет отдельные узлы типа LinkedListNode, поэтому вставка и удаление являются операциями O (1).
Вам просто нужно заблокировать операции чтения и вставки с помощью конструкции lock
.
EDIT
Хорошо, я думаю, что понимаю, что вы хотите. Вам нужен список, подобный структуре данных, которая разбита на куски элементов. Вы хотите самостоятельно писать и читать фрагменты элементов, не блокируя весь список.
Я предлагаю использовать LinkedList, содержащий ваши фрагменты данных.
Сами блоки могут быть представлены в виде простого List или экземплярами LinkedList.
Вы должны заблокировать доступ к глобальному LinkedList.
Теперь ваши темы писателя заполняют один личный список из n элементов одновременно По окончании писатель блокирует LinkedList и добавляет свой личный список с элементами данных в LinkedList.
Поток читателя блокирует LinkedList, читает один кусок и снимает блокировку. Теперь он может обрабатывать n элементов данных, не блокируя их.