gpt4 book ai didi

java - 为什么像获取和添加这样的原子操作会返回被更改变量的旧值?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:48:13 24 4
gpt4 key购买 nike

我正在努力学习并更好地理解多线程,但我对获取和添加等原子函数的行为很着迷。在 fetch-and-add 的特定情况下,我的理解是一个值(假设 x 当前等于 5)被增加一个增量值(假设 3),结果和(8)被写入 x 的放在内存中,但返回旧值 (5)。

在不同的地方(如 OpenGL 的原子函数、Java 的 AtomicIntegers 以及更多领域)还有其他几个这样的函数具有类似的行为。但我不明白的是,为什么代码中的某个地方想要写入内存,但仍然返回它首先想要修改的值。任何人都可以帮助阐明这一点吗?

最佳答案

答案很简单。原子函数的本质是它们修改(在本例中为增量)在执行时的实际值,这可能与您的代码知道的值不同。

例子:

x = 5; // x is global
y = atomically_increment(x);
// what is y?

现在,如果恰好在实际发生增量之前 x 恰好从 5 变为 6,则 y 等于 6,而 x 等于 9。

关于java - 为什么像获取和添加这样的原子操作会返回被更改变量的旧值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36484358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com