我有一个static
方法,可以被多个线程同时访问。对于线程安全collection
,迭代的方法不会改变大小(不添加/不删除)。请注意,该项是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
答案 0 :(得分:0)
为什么不直接锁定item对象,而不是创建一个锁数组?
即
private static void DoSomethingOnItem(string wanted)
{
foreach (var item in items)
{
if (item.name == wanted)
{
lock (item)
item.DoSomething();
}
}
}