Hem*_*mal 2 concurrency multithreading computer-science data-structures
除了可以在多线程程序中使用的众所周知的数据结构,如并发堆栈、并发队列、并发列表、并发散列。是否还有其他鲜为人知但有用的数据结构可用于并行/多线程编程。
即使它们是经过一些优化的上述数据结构的一些不同版本,也请分享。
请务必包括一些参考资料。
编辑:将继续列出我发现的内容
1)ConcurrentCuckooHashing(ConcurrentHashing的优化版)
2) ConcurrentSkipList
如果您不介意,我将尝试用 JDK 中的示例来回答:
列表:
CopyOnWriteArrayList 是一个列表,通过在每次修改列表时重新创建后备数组来实现线程安全使用;Collections.synchronizedList()是线程安全的,因为它们包括大多数操作的排他锁定(迭代是一个例外);ArrayBlockingQueue. 队列大小固定,当没有任何东西可以拉出或没有空间可以推入时会阻塞;ConcurrentLinkedQueue 是一个基于Michael-Scott算法的无锁队列;套:
Collections.newSetFromMap()并带有背衬ConcurrentHashMap。使用这些集合,您可以确定它的迭代器不会出现ConcurrentModificationException,并且它们使用条带化技术来锁定它 - 不需要锁定所有集合来执行某些操作。例如,当你要添加元素时,只会hashCode()锁定元素确定的集合中的部分;ConcurrentSkipListSet. 基于跳过列表数据结构的线程安全集;Collections.synchronizedSet()。关于类似列表的所有要点都适用于此。地图:
ConcurrentHashMap我已经提到并解释过了。条带化基于项目键;ConcurrentSkipListMap. 基于跳过列表的线程安全映射;Collections.synchronizedMap()。关于类似列表和地图的所有要点都适用于此。这些或多或少是用于多线程使用的标准数据结构,对于大多数实际任务来说应该足够了。我还发现了一些您可能会觉得有用的链接:
| 归档时间: |
|
| 查看次数: |
1941 次 |
| 最近记录: |