Потокобезопасные коллекции in.NET


Что является стандартом в настоящее время, когда требуется потокобезопасная коллекция (например, набор). Синхронизирую ли я его сам, или есть ли изначально потокобезопасная коллекция?

4 65

4 ответа:

платформа .NET 4.0 представляет несколько потокобезопасных коллекций в

Pre .net 4.0 большинство коллекций в .Net не являются потокобезопасными. Вам придется сделать некоторую работу самостоятельно, чтобы справиться с синхронизацией:http://msdn.microsoft.com/en-us/library/573ths2x.aspx

цитата из статьи:

коллекции классов могут быть сделаны поток безопасное использование любого из следующих методы:

создать потокобезопасную оболочку с помощью Синхронизированный метод, и доступ сбор исключительно через это обертка.

Если класс не имеет Синхронизированный метод, производный от класс и реализовать синхронизированный метод с использованием свойства SyncRoot.

используйте механизм блокировки, например оператор блокировки в C# (SyncLock in Visual Basic), на SyncRoot свойство при доступе к коллекция.

Синхронизировать Корневое Свойство
Блокировка Заявлением

Object thisLock = new Object();
......
lock (thisLock)
{
    // Critical code section
}

в .net версии 4.0 в представил

.NET 4 предоставляет набор потокобезопасных коллекций в разделе System.Коллекции.Одновременно

в дополнение к очень полезным классам в System.Collections.Concurrent, один стандартный метод в сценариях в основном-чтение-редко-изменение (или если есть, однако, частые, но не параллельные записи), который также применим к .Net, называется копировать на запись.

Он имеет несколько свойств, которые желательны в высококонкурентных программах:

  • экземпляры объектов коллекции сами по себе неизменяемы (т. е. потокобезопасны, могут быть безопасно перечислены без блокировки)
  • модификация может занять столько времени, сколько она хочет, производительность и параллелизм чтения не влияют
  • может быть реализовано в общем превратить любую структуру данных, которая не является потокобезопасным в

ограничение: если есть параллельные записи, изменения, возможно, придется повторить, так что чем больше параллельных записей получить, тем менее эффективным он становится. (Это оптимистичного параллелизма at работа)

Edit