У меня есть BindingList, что я собираюсь заполнить в двух разных потоках ... Использует метод BindingList.Add() ThreadSafe?Является ли ICollection <T> .Добавить ThreadSafe?
ответ
Нет, метод BindingList.Add
не поточно.
В документации для данного класса вы можете найти эту стандартную фразу по безопасности потока:.
«Любые открытые (Shared в Visual Basic) члены этого типа являются поточно членов экземпляров не являются гарантированно будет резьба безопасной. "
Это означает, что класс не имеет каких-либо соображений безопасности потока.
Вам необходимо синхронизировать любые обращения к экземпляру BindingList
. Вы можете использовать это с lock
ключевым словом:
lock(_sync) {
myBindingList.Add(something);
}
Объект, переменной _sync
относится к используется в качестве идентификатора для замка, поэтому весь код, который получает доступ к такой списка должен использовать ту же ссылку на замок. Обычно используется экземпляр объекта:
private object _sync = new Object();
No, Collection<T>.Add
не является потокобезопасным.
Часто MSDN охватывает безопасность потоков в статье класса, а не отдельных методах. То есть для Collection
Коллекция может поддерживать несколько читателей одновременно, пока коллекция не изменяется. Тем не менее, перечисление через коллекцию по существу не является потокобезопасной процедурой. Чтобы гарантировать безопасность потока во время перечисления, вы можете заблокировать сбор во время всего перечисления. Чтобы обеспечить доступ к коллекции несколькими потоками для чтения и записи , вы должны реализовать свою собственную синхронизацию.
Обратите внимание, что вы не можете сказать, является ли метод интерфейса потокобезопасным или нет, потому что интерфейс не определяет какие-либо требования безопасности потока, он определяет только подпись метода. Вы должны проверить каждую индивидуальную реализацию, если у нее есть какие-то особые гарантии безопасности потоков.
Пространство имен System.Collections.Concurrent предоставляет несколько потокобезопасных классов коллекций, которые следует использовать вместо соответствующих типов в пространствах имен System.Collections и System.Collections.Generic, когда несколько потоков обращаются к коллекции одновременно.
http://msdn.microsoft.com/en-us/library/system.collections.concurrent.aspx
- 1. Является ли ICollection <>. Добавить() потокобезопасным?
- 2. Является ли ContextObject ThreadSafe?
- 3. Является ли I18n.with_locale threadsafe?
- 4. Является ли TcpClient.Available threadsafe?
- 5. Является ли .NET double.ToString threadsafe?
- 6. ICollection/ICollection <T> неоднозначность проблемы
- 7. Является ли Linq для Sql DeleteOnSubmit threadsafe?
- 8. Является ли мой PropertyLoader singleton threadsafe?
- 9. Почему ICollection <T> реализовать ICollection?
- 10. ICollection против ICollection <T> - неоднозначность между ICollection <T> .Count и ICollection.Count
- 11. Перечислите набор IDictionary.Keys, который является ICollection <T>
- 12. Получить ICollection из IQueryable <ICollection> LINQ Query
- 13. Добавить элементы ICollection
- 14. Являются ли генераторы Threadsafe?
- 15. Карта от ICollection <EFEntity> к ICollection <ViewModel> к ICollection <Object> с AutoMapper
- 16. Generic Icollection <T>
- 17. Как проверить, реализует ли тип ICollection <T>
- 18. Как добавить строку в ICollection <string>?
- 19. Назначение моего ICollection <T> на свойство ICollection
- 20. Является ли клиент таблицы Azure для .NET Threadsafe?
- 21. Является ли CWnd :: GetSafeHwnd() и CWnd :: m_hWnd ThreadSafe?
- 22. Является ли Threadpool Threadsafe доступным через mutliple экземпляры?
- 23. Является ConcurrentDictionary ключами или значениями property threadsafe
- 24. Есть ли у ICollection <T> заказ?
- 25. Может ли CAS (Jasig) перезагрузить сервер TGT?
- 26. TypeOf (ICollection <>) .GetTypeInfo(). IsAssignableFrom (TypeOf (IList <>))
- 27. Влияет с ICollection <TestCastChild> на ICollection <ICastBase>
- 28. У вас есть ICollection <int> рядом с ICollection <myobject> в Entity Framework?
- 29. ICollection <> внутри ICollection <> в Razor - невозможно получить имена моделей
- 30. Стек <T> реализует ICollection, но имеет методы от ICollection <T>