数据结构在多线程编程中很有用

时间:2014-05-06 11:21:10

标签: multithreading data-structures concurrency computer-science

除了众所周知的数据结构,它可用于多线程程序,如并发堆栈,并发队列,并发列表,并发哈希。 是否有其他较少知晓但有用的数据结构可用于并行/多线程编程。

即使它们是上面列出的数据结构的某些不同版本并进行了一些优化,也请分享。

请包含一些参考资料。

编辑:将继续列出我找到的内容

1)ConcurrentCuckooHashing(ConcurrentHashing的优化版本)

2)ConcurrentSkipList

1 个答案:

答案 0 :(得分:4)

如果你不介意的话,我会尝试回答JDK的例子:

<强>解释

  • CopyOnWriteArrayList是一个列表,通过每次修改列表时重新创建后备数组来实现线程安全使用;
  • Collections.synchronizedList()返回的列表是线程安全的,因为它们包含大多数操作的独占锁定(迭代是例外);
  • ArrayBlockingQueue。具有固定大小的队列,当没有任何东西可以拉出或没有空间可以推入时阻塞;
  • ConcurrentLinkedQueue是基于Michael-Scott算法的无锁队列;
  • Concurrent stack, based on Treiber algorithm。令人惊讶的是,我没有在JDK中找到它;

<强>集

  • 设置,由工厂Collections.newSetFromMap()返回并带有支持ConcurrentHashMap。使用这些集合,您可以确保其迭代器不容易ConcurrentModificationException,并且它们使用条带化技术来锁定它 - 锁定所有集合不是执行某些操作所必需的。例如,当您要添加元素时,只会锁定由元素hashCode()确定的集合部分;
  • ConcurrentSkipListSet。基于Skip List数据结构的线程安全集;
  • Collections.synchronizedSet()返回的集合。所有关于类似名单的论点都适用于此。

地图

    我已经提到并解释过的
  • ConcurrentHashMap。条带化基于项目键;
  • ConcurrentSkipListMap。线程安全映射,基于跳过列表;
  • 地图,由Collections.synchronizedMap()返回。关于类似列表和地图的所有要点都适用于此。

这些或多或少是用于多线程使用的标准数据结构,对于大多数实际任务来说应该足够了。我还发现了一些你可能会觉得有用的链接: