multithreading - 原子性和不变性是并发/并行编程中解决相同问题的两种不同方法吗?

标签 multithreading concurrency immutability atomicity

可以选择使用原子操作还是使用不可变类型来设计并发/并行系统,这是正确的说法吗? IE。原子操作导致设计原子共享状态的系统,而不可变类型导致设计避免完全共享的系统?这两种设计是本质上可以互相替代(解决相同的基础问题)还是解决不同的问题(意味着可能必须同时使用原子操作和不变类型来设计完全并发安全的系统)?

最佳答案

虽然这两个概念都与并发系统相关,并且都保证不会读取任何中间状态,但它们却截然不同,并且适合不同的情况。例如,迭代不可变的数据结构可确保正确且“安全”的迭代,而可变的数据结构即使迭代操作是原子的,对于迭代也不是安全的。另一方面,原子地更改共享/中央数据存储区可确保永远不会读取不正确的数据,而不可更改性则无关紧要,因为存储区必须更改。

关于multithreading - 原子性和不变性是并发/并行编程中解决相同问题的两种不同方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44728784/

相关文章:

c# - 我应该使用 ThreadPools 还是 Task Parallel Library 来进行 IO 绑定(bind)操作

Python 多处理随机且无提示地失败

Java 线程 : Figure out which threads are still running

java - 为什么当 Future 抛出这个 OutOfMemoryError 时没有出现?

data-structures - 持久与不可变的数据结构

java - 如何将普通List变成ImmutableList?

Java同步问题

java - 等待...通知低级同步的最佳选择是什么?

c++ - boost ASIO 并发度

java - 使用 Google Guava 创建不可变版本后如何丢弃原始集合?