2013-09-22 3 views

ответ

2

Нет, метод BindingList.Add не поточно.

В документации для данного класса вы можете найти эту стандартную фразу по безопасности потока:.

«Любые открытые (Shared в Visual Basic) члены этого типа являются поточно членов экземпляров не являются гарантированно будет резьба безопасной. "

Это означает, что класс не имеет каких-либо соображений безопасности потока.

Вам необходимо синхронизировать любые обращения к экземпляру BindingList. Вы можете использовать это с lock ключевым словом:

lock(_sync) { 
    myBindingList.Add(something); 
} 

Объект, переменной _sync относится к используется в качестве идентификатора для замка, поэтому весь код, который получает доступ к такой списка должен использовать ту же ссылку на замок. Обычно используется экземпляр объекта:

private object _sync = new Object(); 
4

No, Collection<T>.Add не является потокобезопасным.

Часто MSDN охватывает безопасность потоков в статье класса, а не отдельных методах. То есть для Collection

Коллекция может поддерживать несколько читателей одновременно, пока коллекция не изменяется. Тем не менее, перечисление через коллекцию по существу не является потокобезопасной процедурой. Чтобы гарантировать безопасность потока во время перечисления, вы можете заблокировать сбор во время всего перечисления. Чтобы обеспечить доступ к коллекции несколькими потоками для чтения и записи , вы должны реализовать свою собственную синхронизацию.

Обратите внимание, что вы не можете сказать, является ли метод интерфейса потокобезопасным или нет, потому что интерфейс не определяет какие-либо требования безопасности потока, он определяет только подпись метода. Вы должны проверить каждую индивидуальную реализацию, если у нее есть какие-то особые гарантии безопасности потоков.

1

Пространство имен System.Collections.Concurrent предоставляет несколько потокобезопасных классов коллекций, которые следует использовать вместо соответствующих типов в пространствах имен System.Collections и System.Collections.Generic, когда несколько потоков обращаются к коллекции одновременно.

http://msdn.microsoft.com/en-us/library/system.collections.concurrent.aspx

Смежные вопросы