Python中是否有与Java volatile
概念相当的东西?
在Java中有一个关键字volatile
。据我所知,当我们在声明变量时使用volatile
,那么对该变量值的任何更改将对同时运行的所有线程可见。
我想知道在Python中是否有类似的东西,这样当一个变量的值在一个函数中被改变时,它的值将对同时运行的所有线程可见。
volatile
关键字,该变量的任何更改都将对同时运行的所有线程可见。
volatile
比这个复杂一些。 volatile
确保Java将变量值存储和更新在主内存中。如果没有volatile
,JVM可以自由地将值存储在CPU缓存中,这会导致对值的更新在不同CPU核上运行的不同线程(在同一个核上并发运行的线程将看到该值)看不到。volatile
,因为不存在这样的概念,并且您不必担心它。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()
queue = []
怎么样?由于它在所有函数之外声明,它不也被视为全局变量吗? - Pabloglobal
的作用是允许您修改程序中其他地方绑定的变量。如果不这样做,您只能对其进行“读取”访问。 - Oyono
volatile
,因为它们也只是在堆上使用对象。 - Martijn Pieters