相当于Python中的Java易失性
Python是否具有与Java概念等效的特性?volatile
在Java中有一个关键字。据我所知,当我们在声明变量时使用时,对该变量值的任何更改都将对同时运行的所有线程可见。volatile
volatile
我想知道Python中是否有类似的东西,这样当变量的值在函数中更改时,其值将对同时运行的所有线程可见。
Python是否具有与Java概念等效的特性?volatile
在Java中有一个关键字。据我所知,当我们在声明变量时使用时,对该变量值的任何更改都将对同时运行的所有线程可见。volatile
volatile
我想知道Python中是否有类似的东西,这样当变量的值在函数中更改时,其值将对同时运行的所有线程可见。
据我所知,当我们在声明变量时使用易失性时,对该变量值的任何更改都将对同时运行的所有线程可见。
volatile
比这更微妙一点。 确保 Java 在主内存中存储和更新变量值。如果没有 ,JVM 可以自由地将值存储在 CPU 高速缓存中,这会产生副作用,即对值的更新对于在不同 CPU 内核上运行的不同线程是不可见的(在同一内核上同时运行的线程将看到该值)。volatile
volatile
Python从来不这样做。Python 将所有对象存储在主内存中的堆上。此外,由于Python解释器循环使用锁定(GIL)的方式,一次只有一个线程会主动运行Python代码。不同的线程永远不会在不同的CPU上运行Python解释器循环。
所以你不需要在Python中使用,没有这样的概念,你也不需要担心它。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()