<分区>
除了可以在多线程程序中使用的众所周知的数据结构,如并发堆栈、并发队列、并发列表、并发哈希。 是否还有其他鲜为人知但有用的数据结构可用于并行/多线程编程。
即使它们是上面列出的数据结构的一些不同版本并进行了一些优化,也请分享。
请务必包括一些引用资料。
编辑:将继续列出我找到的内容
1)ConcurrentCuckooHashing(ConcurrentHashing的优化版)
2) 并发跳过列表
<分区>
除了可以在多线程程序中使用的众所周知的数据结构,如并发堆栈、并发队列、并发列表、并发哈希。 是否还有其他鲜为人知但有用的数据结构可用于并行/多线程编程。
即使它们是上面列出的数据结构的一些不同版本并进行了一些优化,也请分享。
请务必包括一些引用资料。
编辑:将继续列出我找到的内容
1)ConcurrentCuckooHashing(ConcurrentHashing的优化版)
2) 并发跳过列表
最佳答案
如果你不介意的话,我会尽量用JDK的例子来回答:
列表:
CopyOnWriteArrayList
是一个列表,它通过在每次修改列表时重新创建支持数组来实现线程安全使用;Collections.synchronizedList()
返回的列表是线程安全的,因为它们包括对大多数操作的独占锁定(迭代是一个异常(exception));ArrayBlockingQueue
。具有固定大小并在没有可拉出或没有空间可插入时阻塞的队列;ConcurrentLinkedQueue
是一个基于 Michael-Scott 算法的无锁队列;集合:
Collections.newSetFromMap()
返回,带有支持 ConcurrentHashMap
。使用这些集合,您可以确保它的迭代器不容易出现 ConcurrentModificationException
,并且它们使用 strip 化技术来锁定它 - 锁定所有集合并不是执行某些操作所必需的。例如,当你要添加元素时,只有元素hashCode()
确定的集合部分会被锁定;ConcurrentSkipListSet
。基于 Skip List 的线程安全集数据结构;Collections.synchronizedSet()
返回。关于类似列表的所有要点都适用于此处。map :
ConcurrentHashMap
我已经提到并解释过了。 strip 化基于项目键;ConcurrentSkipListMap
。线程安全映射,基于跳跃列表;Collections.synchronizedMap()
返回。关于类似列表和 map 的所有要点都适用于此处。这些或多或少是用于多线程使用的标准数据结构,对于大多数实际任务来说应该足够了。我还找到了一些您可能会觉得有用的链接:
关于multithreading - 多线程编程中有用的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23493301/