我的第一个想法是关于SpinLock
或Concurrent Collections
锁定将在我测试时在这里工作,但它更昂贵!
此处的过程基于并行编程。并且任务并行运行多个。
在SpinLock版本中,我偶尔会遇到一个错误,类似于"Index out of range"
。
我写的SpinLock版本无法完成我想要的工作,是否可以对其进行任何更改以使其工作?或者它是否与这种情况完全相关?
任何信息?
它有更好的选择吗?
这就是我所做的:
lock (lckRelatz)
{
relatz.Add(st);
}
这里是SpinLock版本 - 这是一个并行运行的方法:
SpinLock spinLk = new SpinLock();
bool gotLock = false;
try
{
spinLk.Enter(ref gotLock);
relatz.Add(st);
}
finally
{
if (gotLock)
spinLk.Exit();
}
答案 0 :(得分:2)
您似乎正在为每个帖子创建新的SpinLock
。这实际上不会锁定任何东西。你需要有一个SpinLock
并使用你所有线程中的那个。
但使用并发收集是更好的解决方案。它们经过高度优化,使用它们意味着您不必担心自己的所有锁定。