相当于 Java volatile in Python
An equivalent to Java volatile in Python
Python是否有等同于Javavolatile
的概念?
在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)的方式,一次只有一个线程会主动 运行ning Python 代码。不同的线程不可能 运行 在不同的 CPU.
上执行 Python 解释器循环
所以在Python中不需要使用volatile
,没有这个概念,不用担心。
关键字"global"就是您要找的:
import threading
queue = []
l = threading.Lock()
def f():
global queue
l.acquire()
queue.append(1)
l.release()
def g():
print(queue)
threads = [
threading.Thread(target=f),
threading.Thread(target=g)
]
for t in threads:
t.start()
for t in threads:
t.join()
Python是否有等同于Javavolatile
的概念?
在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)的方式,一次只有一个线程会主动 运行ning Python 代码。不同的线程不可能 运行 在不同的 CPU.
上执行 Python 解释器循环所以在Python中不需要使用volatile
,没有这个概念,不用担心。
关键字"global"就是您要找的:
import threading
queue = []
l = threading.Lock()
def f():
global queue
l.acquire()
queue.append(1)
l.release()
def g():
print(queue)
threads = [
threading.Thread(target=f),
threading.Thread(target=g)
]
for t in threads:
t.start()
for t in threads:
t.join()