【发布时间】:2012-10-02 16:05:29
【问题描述】:
我会尽量让这个问题尽可能笼统,但我会简单介绍一下我的实际问题——
我正在尝试为优先级队列实现并发跳过列表。每个“节点”都有一个值和一个“前向”节点数组,其中 node.forward[i] 表示跳过列表第 i 级上的下一个节点。对于写访问(即插入和删除),我使用自旋锁(仍在确定这是否是最好的锁)
我的问题本质上是,当我需要读取访问权限以进行遍历时,
node = node.forward[i]
围绕这样的事情我需要什么样的线程安全?如果另一个线程在我读取的同时修改 node.forward[i](没有当前的读取锁定机制),这里会发生什么?
我最初的想法是在 Forward 索引器的 getter 和 setter 上设置一个 ReaderWriterLockSLim。在这种情况下会不会有太多不必要的锁定?
编辑:或者最好改为使用 Interlocked.Exchange 来进行我所有的读取?
【问题讨论】:
-
+1 因为跳过列表很棒。 :D
标签: c# multithreading algorithm .net-4.0