Ориентированные на многопотоковое исполнение наборы в.NET

Что является стандартом в наше время, когда каждому нужен ориентированный на многопотоковое исполнение набор (например, Набор). Я синхронизирую его сам, или есть ли по сути ориентированный на многопотоковое исполнение набор?

66
задан John Saunders 5 June 2010 в 12:19
поделиться

3 ответа

В .NET 4.0 Framework представлено несколько потокобезопасных коллекций в пространстве имен System.Collections.Concurrent:

ConcurrentBag
Представляет потокобезопасную неупорядоченную коллекцию объектов.

ConcurrentDictionary
Представляет потокобезопасную коллекцию пар ключ-значение, к которой могут одновременно обращаться несколько потоков.

ConcurrentQueue
Представляет потокобезопасную коллекцию типа "первый вошел - первый вышел" (FIFO).

ConcurrentStack
Представляет собой потокобезопасную коллекцию "последний вошел-первый вышел" (LIFO).


Другие коллекции в .NET Framework по умолчанию не являются потокобезопасными и требуют блокировки для каждой операции:

lock (mySet)
{
    mySet.Add("Hello World");
}
99
ответ дан 24 November 2019 в 15:00
поделиться

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

Цитата из статьи:

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

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

Если класс не имеет Synchronized, создайте производную от класса и реализуйте метод Synchronized метод, используя свойство SyncRoot.

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

Свойство Sync Root
Оператор блокировки

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

В .net 4.0 появилось пространство имен System.Collections.Concurrent

Blocking Collection
Concurrent Bag
Concurrent Queue
Concurrent Dictionary
Ordable Partitioner
Partitioner
Partitioner T

18
ответ дан 24 November 2019 в 15:00
поделиться

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

4
ответ дан 24 November 2019 в 15:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: