Python等同于Java volatile
概念吗?
在Java中,有一个关键字volatile
。据我所知,当我们在声明变量时使用volatile
时,该变量值的任何更改将对同时运行的所有线程可见。
我想知道Python中是否有类似的东西,以便在函数中更改变量的值时,它的值对同时运行的所有线程可见。
答案 0 :(得分:9)
据我所知,当我们在声明变量时使用volatile时,对该变量值的任何更改将对同时运行的所有线程可见。
volatile
的细微之处远不止于此。 volatile
确保Java在主存储器中存储和更新变量值 。如果没有volatile
,JVM可以自由地将值存储在CPU缓存中,这对值的更新具有副作用,该更新对于在不同CPU内核上运行的不同线程(线程)不可见同时在同一内核上运行的计算机 会看到该值)。
Python从来没有这样做。 Python将所有对象存储在堆中的主内存中。此外,由于Python解释程序循环如何使用锁定(GIL),因此一次仅一个线程将主动运行Python代码。永远不可能有不同的线程在不同的CPU上运行Python解释器循环。
因此,您不需要在Python中使用volatile
,就没有这样的概念,也不必担心。
答案 1 :(得分:-1)
您正在寻找关键字“ 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()