python - 双重检查锁定在 Python 中是线程安全的吗?

标签 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 中的线程安全?是否存在/不存在的场景/实现?为什么?

最佳答案

看看PEP 583 - Concurrency memory model for Python , 已撤回。

我想它被撤回的原因(虽然我找不到足够的信息)是因为有 different implementations of Python ,并且很难对每个人都执行这样的标准。

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

关于python - 双重检查锁定在 Python 中是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55957708/

相关文章:

python - 让机器人加入 vc 并播放音乐

python - 在python中使用pandas根据其他列中给定的值选择列

python - 查找列表中每个字符串之间的最大差异

java - onPreExecute() 和 onPostExecute() 是在 UI 线程上执行还是在启动 AsyncTask 的线程上执行?

C# - ThreadPool QueueUserWorkItem 使用?

c# - 线程不安全对象中的这种锁定模式有什么问题吗?

c++ - 具有默认保护析构函数的类不是平凡可破坏的,但派生类是?

python - 如何检查列表中的单词然后返回计数?

c++ - 我们是否需要一个可访问的复制构造函数来在 C++98/03 中进行值初始化?

c++ - std::unordered_map<T,std::unique_ptr<U>> 可复制?海湾合作委员会错误?