做线程.本地使用锁进入?

2024-05-17 15:12:48 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面的陈述中,是否有一个Lock.acquire/release正在被隐藏起来:

my_thread_local = threading.local()
my_thread_local.some_value = 1

这个怎么样:

local_variable = my_thread_local.some_value

Tags: lockreleasevaluemylocalsomevariablethread
1条回答
网友
1楼 · 发布于 2024-05-17 15:12:48

仅当回退实现正在使用时。

如果没有以其他方式提供线程本地存储(即,如果在编译解释器时未定义Py_HAVE_NATIVE_TLS),则将使用包含显式锁定的实现。你知道吗

在具有适当本机实现的平台上,因此Python运行时不需要模拟此功能,因此也不需要在Python运行时层进行锁定。你知道吗

在撰写本文时(2017年7月),python3开发分支的回退实现was recently removed(python3不再有BeOS或其他以前支持的模糊操作系统的线程模块)。因此,在python3的未来版本中,线程本地存储的本机版本将始终在线程可用时使用。你知道吗


流程图:

  • 你在使用Python2.x吗?
    • 你在窗户上吗?本机线程本地存储可用。
    • 你在任何非Windows平台上吗?Python使用的是基于锁的实现。
  • 您使用的是Python3.1还是更高版本?
    • 你在窗户上吗?本机线程本地存储可用。
    • 您是在现代的Linux、MacOS还是其他实现POSIX线程的平台上?本机线程本地存储可用。
    • 您是否在不支持pthreadsapi的非Windows平台上?要么根本没有线程支持,要么线程本地存储将涉及锁定。

(这里有意不介绍python3.0:2.7和3.1及更高版本中的本机线程本地存储实现在3.0中不在其他版本中托管它们的代码中的同一位置,我不认为花时间深入研究以确定功能是否临时移动了如果它完全不见了)。

相关问题 更多 >