python dict 的 len() 相对于 GIL 是原子的吗?
Is a python dict's len() atomic with respect to the GIL?
我问的是 CPython,python2.7。假设我有一个 dict
,还有一些线程会不时通过调用 add()
:
来插入值
d = {}
dlock = threading.Lock()
def add(key, value):
with dlock:
d[key] = value
在不获取锁的情况下,仅依靠 GIL 从单独的线程获取 dict 的大小是否安全?
def count():
return len(d)
假设我不关心获得精确的正确值,只关心在 count()
期间的某个时刻正确的任何值。
我不推荐它,但是是的,GIL 会保护它。在 len
调用期间没有机会释放 GIL。
我问的是 CPython,python2.7。假设我有一个 dict
,还有一些线程会不时通过调用 add()
:
d = {}
dlock = threading.Lock()
def add(key, value):
with dlock:
d[key] = value
在不获取锁的情况下,仅依靠 GIL 从单独的线程获取 dict 的大小是否安全?
def count():
return len(d)
假设我不关心获得精确的正确值,只关心在 count()
期间的某个时刻正确的任何值。
我不推荐它,但是是的,GIL 会保护它。在 len
调用期间没有机会释放 GIL。