Использование на предмет блокирует внутри цикла - PullRequest
0 голосов
/ 10 января 2011

У меня есть метод static, к которому одновременно обращаются многие потоки. Для безопасности потока collection этот метод повторения не изменил бы его размер (без добавления / без удаления). Обратите внимание, что item является объектом Lazy, и у меня нет доступа к конструктору Lazy, чтобы использовать потоковый (MEF сделать это):

private static readonly object _syncLock = new object();

// Now inside a static method

private static DoSomethingOnItem(string wanted)
{
   foreach (var item in items)
   {
      if (item.Metadata["Name"] = wanted)
      {
         lock (_syncLock)
            item.DoSomething();
      }
   }
}

Повышает ли это производительность, если я использую и массив locks на элемент или многие locks имеет много побочных эффектов, а не повышение производительности?

private static object[] _syncLocks;
// Code...
_syncLocks = new object[itemsCount]; // in a thread-safe manner

Тогда внутри цикла используйте каждый item определенный lock

1 Ответ

0 голосов
/ 10 января 2011

Почему бы просто не заблокировать объект item, а не создать массив блокировок?

* 1003 Т.е. *

private static void DoSomethingOnItem(string wanted)
{
   foreach (var item in items)
   {
      if (item.name == wanted)
      {
         lock (item)
            item.DoSomething();
      }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...