У меня есть метод static
, к которому обращаются многие потоки одновременно. Для обеспечения безопасности потоков collection
этот метод, который выполняет итерацию, не изменится - это размер (без добавления/отсутствия удаления). Обратите внимание, что элемент является Lazy
объектом и у меня нет доступа к Lazy
конструктору использовать поточно-один (MEF
сделать):Использование per item locks внутри цикла
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
Вместо этого используйте 'ReaderWriterLockSlim'. Не нужно изобретать велосипед. :) http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim.aspx – bzlm
Возможное повторение [Thread-Safe ленивый экземпляр с использованием MEF] (http://stackoverflow.com/questions/4633634/thread-safe-lazy-instantiating-using-mef) –