multithreading - 多线程编程中有用的数据结构

标签 multithreading data-structures concurrency computer-science

<分区>

除了可以在多线程程序中使用的众所周知的数据结构,如并发堆栈、并发队列、并发列表、并发哈希。 是否还有其他鲜为人知但有用的数据结构可用于并行/多线程编程。

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

请务必包括一些引用资料。

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

1)ConcurrentCuckooHashing(ConcurrentHashing的优化版)

2) 并发跳过列表

最佳答案

如果你不介意的话,我会尽量用JDK的例子来回答:

列表:

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

集合:

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

map :

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

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

关于multithreading - 多线程编程中有用的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23493301/

相关文章:

c++ - 实现一个指向可变大小结构的指针

.net - LINQ to SQL - 更新以增加非主键字段 - 线程安全

c# - 在不同的应用程序线程上同时写入多个 SQLite 数据库的并发问题

java - 如何用 RXJava 替换 Thread.sleep()

java - 如何使用 wait() 和 notify() 正确暂停线程

java - 假设我有一个好的 key ,当不适合在java中使用 map 时

c++ - 等待逐渐生成的 vector 的片段

java - 队列以收集线程的输出

Java邮件 : How to use different SOCKS5 for different threads?

java - 如何在Java中自定义Set的排序