Коллекции, оптимизированные для параллелизма в .Net - PullRequest
1 голос
/ 27 января 2009

В мире Java существует набор классов , оптимизированных для одновременных задач. Я предполагаю, что в .Net что-то похожее, но после быстрого поиска в MSDN я ничего не смог найти. Я искал очередь с политикой справедливости для использования в ситуациях потребителя / производителя.

Спасибо.

Ответы [ 3 ]

3 голосов
/ 27 января 2009

Библиотека Parallels для .NET содержит несколько поточно-ориентированных коллекций.

Один из них - ConcurrentQueue<T>

http://blogs.msdn.com/pfxteam/archive/2008/08/12/8852005.aspx

1 голос
/ 27 января 2009

Конечно, оксюморон? Коллекции, которые являются потокобезопасными, вероятно, будут иметь больше блокировок, чем требуется. Для оптимизации обычно определяются блокировки в более высоком месте.

0 голосов
/ 27 января 2009

Не универсальные коллекции .NET (пространство имен System.Collections) могут это делать. Я добавил следующий фрагмент со страницы MSDN Queue.SyncRoot :

Queue myCollection = new Queue();

lock(myCollection.SyncRoot)
{
   foreach (Object item in myCollection)
   {
      // Insert your code here.
   }
}

Или вы можете сразу создать синхронизированную оболочку:

Queue mySyncCollection = Queue.Synchronized(myCollection);
// No locks required

К сожалению, это невозможно сделать с универсальными коллекциями, поэтому, возможно, вам придется написать свои собственные методы оболочки / расширения, если вы хотите использовать универсальные коллекции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...