首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不变性对并发更有用吗?

不变性对并发更有用吗?
EN

Stack Overflow用户
提问于 2016-08-14 23:08:41
回答 1查看 1.3K关注 0票数 0

人们通常说,不可变的数据结构对并发编程更“友好”。解释是,如果一个数据结构是可变的,并且一个线程修改了它,那么另一个线程将“看到”该数据结构的前一个模式。

虽然不可能修改不可变的数据结构,但如果需要更改它,可以创建一个新的数据结构,并为其提供“旧”数据结构的引用。

在我看来,这种情况也不是线程安全的,因为一个线程可以访问旧的数据结构,另一个线程可以访问新的数据结构。如果是这样的话,为什么不可变的数据结构被认为是更线程安全的?

EN

回答 1

Stack Overflow用户

发布于 2016-08-14 23:24:54

这里的想法是,一旦创建了对象,就不能再更改它。作为某种结构一部分的每个对象本身都是不可变的。当您创建新结构并重用旧结构的一些组件时,您仍然不能更改组成此新结构的任何组件的任何内部值。您可以很容易地通过其根组件引用来识别每个结构。

当然,您仍然需要确保以线程安全的方式交换它们,这通常是使用CAS (比较和交换)指令的变体来完成的。或者你可以使用函数式编程,它的函数习惯用法没有副作用(接受不变的输入并产生新的结果),是线程安全、多线程编程的理想选择。

与可变性相比,不可变性有很多好处,但这并不意味着不可变性总是更好。每种方法都有它的优点和应用。有关不变性用法的更多详细信息,请查看this answer。另外,请查看this在某些情况下关于可变性好处的漂亮的书面答案。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38943521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档