锁定添加到集合中

时间:2012-07-11 07:50:14

标签: c# collections concurrency locking task-parallel-library

我的第一个想法是关于SpinLockConcurrent 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();
        }

1 个答案:

答案 0 :(得分:2)

您似乎正在为每个帖子创建新的SpinLock。这实际上不会锁定任何东西。你需要有一个SpinLock并使用你所有线程中的那个。

但使用并发收集是更好的解决方案。它们经过高度优化,使用它们意味着您不必担心自己的所有锁定。