double-checked locking这个惯用法在某些语言中并不可靠,我想知道Python是否是其中之一。更具体地说,是以下代码...
# Objects shared by threads:
obj = None
lock_for_obj = threading.Lock()
def get_obj():
"""Function called concurrently by threads."""
if obj is None:
with lock_for_obj:
if obj is None:
obj = factory() # Never returns `None`
return obj
... Python中的线程安全?有没有的场景/实现?为什么?
答案 0 :(得分:1)
看看已撤消的PEP 583 - Concurrency model model for Python。
我猜想它被撤消的原因(尽管我找不到足够的信息)是因为有different implementations of Python,并且很难在每个标准上执行这样的标准。
结论:当在单个处理器上使用CPython实现时,此代码可能是安全的,或者通常在Jython实现中使用该代码可能是安全的,但不能保证。