Потоковая безопасность List с одним писателем, без перечислителей

Просматривая некоторый код базы данных в поисках ошибки, не связанной с этим вопросом, я заметил, что в некоторых местах List был используется ненадлежащим образом. В частности:

  1. Было много потоков, которые одновременно обращались к списку в качестве читателей, но использовали индексы в списке вместо счетчиков .
  2. В списке был единственный писатель.
  3. Была нулевая синхронизация , читатели и писатели обращались к списку в одно и то же время, но из-за структуры кода доступ к последнему элементу был невозможен. пока не вернется метод, выполнивший Add () .
  4. Ни один элемент не удалялся из списка .

Согласно документации C # , это не должно быть потокобезопасным. Тем не менее, он никогда не подводил. Мне интересно, из-за конкретной реализации List (я предполагаю, что внутренне это массив , который повторно выделяет , когда заканчивается место), это сценарий надстройки n-reader с 1-писателем и 0-перечислителем случайно потокобезопасный, или есть какой-то маловероятный сценарий, когда это может взорваться в текущей реализации .NET4 ?

править: Важная деталь, которую я упустил, читая некоторые ответы. Читатели рассматривают список List и его содержимое как доступный только для чтения.

5
задан Luv 17 December 2012 в 10:34
поделиться