gpt4 book ai didi

java - 易失变量语义

转载 作者:行者123 更新时间:2023-11-30 02:13:24 25 4
gpt4 key购买 nike

我有一些关于 volatile 变量的问题,这些变量不长, double

1.当我们写入和读取时,是否有可能出现竞争条件——例如,当我们读取一个 volatile 变量时,有人可以写入一个新值,而读取线程将无法获取更新后的值?

2.可以2个写入线程写入值,最后,其中一个将与另一个的结果重叠,也可以同时用多个线程读取 volatile ,这意味着读取线程重叠并且所有读取的结果相同同时结果?

3.如果我们在1个 volatile 变量上启动5个读线程和5个写线程,读者的结果是不可预测的?

最佳答案

  1. 是的。您不知道哪一个先发生,因此您的阅读线程会看到两个值之一。

  2. 如果你的意思是覆盖,当然。如果您有 2 次写入,则最后一次写入获胜。如果您的意思是重叠,就像结果值成为两次写入的组合一样,那么不会。即使使用 longdouble 也不行。

  3. 当然。除非您有 volatile int foo = 0; 并且所有编写器都写入 0。然后你就可以保证所有读者都会看到0,否则这取决于日程安排和其他类似的事情。

您所有的问题看起来都像是您期望 volatile 顺序有关,但事实并非如此。它只是保证可见性。如果你想要秩序,你就必须自己强制执行。

关于java - 易失变量语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49427994/

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