Примечание: я задаю этот вопрос относительно структуры 3.5, поэтому я не включаю ни одну из более новых многопоточных конструкций в 4.0 (которую я все еще изучаю).
Я пытался придумать ответ на этот вопрос, чтобы попытаться закрыть аргумент, который у меня был, но я не чувствую, что нашел убедительное описание того, что могло бы или могло произойти в следующем сценарии.
Допустим, у вас есть приложение с несколькими потоками, которые все генерируют объекты, причем каждый поток генерирует уникальный объект. Существует один экземпляр коллекции (List, Stack или Queue), который является хранилищем объектов после того, как они были созданы, и объекты эффективно неизменяемы после добавления в коллекцию.
Во время этого процесса единственной операцией в коллекции является добавление элементов. Там нет чтения, удаления или подсчета сделано. Неважно, какой порядок предметов в коллекции.
Вопрос в том, не существует ли блокировка вокруг коллекции, когда отдельные потоки пытаются добавить объекты, это действительно проблема?
Я говорю да, но почти во всех описаниях учебника о том, почему условия гонки проблематичны, читаются на одном конце и гонке на другом или пишутся в одну переменную, поэтому у меня нет достаточных доказательств, чтобы эффективно аргументировать мое дело.
Моя причина сказать «да» в основном сводится к тому, что коллекции не предназначены для обеспечения безопасности потоков, поэтому вы можете столкнуться с неожиданным или неопределенным поведением, даже если выполняются только «записи». Я предполагаю, что существует риск, что два потока могут попытаться добавить свой объект в один и тот же слот в коллекции, и поэтому вы потеряете объект, когда он будет перезаписан, но я не нашел ничего, что говорит о том, что это действительно возможно. Или что могут быть некоторые закулисные проблемы, например, когда коллекция должна расширяться для размещения большего количества элементов.
Может ли кто-нибудь предоставить мне некоторую информацию, которая поможет положить этот аргумент в порядок? Мне особенно интересно услышать, что может доказать, что я не прав.