【发布时间】:2012-10-19 22:18:50
【问题描述】:
我最近尝试使用跳过列表数据结构来实现并发优先级队列 - 就这个问题而言,如果您不知道什么是跳过列表,我相信只需描绘一个链接列表即可足以回答。我尝试了最小锁定(即同时允许多个入队和出队,仅在必要时锁定节点或其前向指针,尽快释放锁,使用 Interlocked 遍历列表等)。
我对结果很满意。但是,编写一个常规的跳过列表,其中添加和删除被一个同步根锁包围(即在任何给定时间只允许一个操作),实际上速度是原来的两倍。
我认为我的实现中一定有错误。但是,即使是 Microsoft 网站上列出的“并发优先级队列”,实际上也一次只允许一个操作(即同步根锁定入队和出队)
作为一般规则,(如果这个问题过于笼统,请原谅我),更细粒度的锁定实际上会在什么时候带来性能提升?我想在我的情况下,因为我实际上必须使用 Interlocked.Exchange 遍历大型列表(有更好的方法吗?)以及多个测试和测试和设置等,这会减慢入队和出队的速度。
此外,有没有一种工具可以帮助我确定大部分时间都花在了哪里?谢谢。
【问题讨论】:
标签: c# multithreading .net-4.0 locking