У меня есть метод 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