나는 많은 스레드가 동시에 액세스하는 static
메서드가 있습니다. 스레드 안전성이 collection
인 경우이 메서드 반복은 크기가 변경되지 않습니다 (추가/삭제 안 함). 항목 당 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();
}
}
}
그것이 성능을 향상 않고 배열 : 해당 항목이 Lazy
객체 내가 스레드 안전 하나를 (MEF
은 그렇게)를 사용하는 Lazy
생성자에 액세스 할 필요가 없습니다 또는 많은 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
MEF를 사용하여 [스레드 세이프 게으른 인스턴스화] 반복 가능 (http://stackoverflow.com/questions/4633634)/thread-safe-lazy-instantiating-using-mef) –