在Python中经过双重检查的锁定线程安全吗?

时间:2019-05-02 17:45:28

标签: python multithreading language-lawyer

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中的线程安全?有没有的场景/实现?为什么?

1 个答案:

答案 0 :(得分:1)

看看已撤消的PEP 583 - Concurrency model model for Python

我猜想它被撤消的原因(尽管我找不到足够的信息)是因为有different implementations of Python,并且很难在每个标准上执行这样的标准。

结论:当在单个处理器上使用CPython实现时,此代码可能是安全的,或者通常在Jython实现中使用该代码可能是安全的,但不能保证。