java - 相当于 Python 中的 Java volatile

标签 java python volatile

Python 是否具有与 Java volatile 概念等价的概念?

在Java中有一个关键字volatile。据我所知,当我们在声明变量时使用 volatile 时,对该变量值的任何更改都将对同时运行的所有线程可见。

我想知道 Python 中是否有类似的东西,以便在函数中更改变量的值时,它的值将对同时运行的所有线程可见。

最佳答案

As far as I know, when we use volatile while declaring a variable, any change to the value of that variable will be visible to all threads running at the same time.

volatile 比这更细微。 volatile 确保 Java 在主内存 中存储和更新变量值。如果没有 volatile,JVM 可以自由地将值存储在 CPU 缓存中,这会产生副作用,即对运行在不同 CPU 上的不同线程不可见的值更新核心(在同一核心上同时运行的线程看到该值)。

Python 不会这样做。 Python 将所有对象 存储在主内存中的堆上。此外,由于 Python 解释器循环使用锁定(GIL)的方式,一次只有一个线程会主动运行 Python 代码。不同的线程不可能在不同的 CPU 上运行 Python 解释器循环。

所以你不需要在Python中使用volatile,没有这个概念,你不需要担心。

关于java - 相当于 Python 中的 Java volatile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53780267/

相关文章:

java - 数组实例化调用构造函数?

java - org.hibernate.hql.internal.ast.QuerySyntaxException : Path expected for join exeption

python - 无法在 docker 容器中安装任何 python 包

python - 如何获取所有行的 QuerySet,每一行都有特定的字段?

java - 非常大的字符串出现 StringIndexOutOfBoundsException

java - SimpleDateFormat 无法正常工作

Python:在 __init__ 中引发异常是不好的形式吗?

java - fortify 正在为代码的正确性提供双重检查锁定问题

C题: If I pass the address of a variable to a function that modifies it is there a guarantee that the variable will be "reloaded" after return?

java - 为什么需要复制 volatile 变量而不是直接使用它?