【发布时间】:2018-05-23 22:07:55
【问题描述】:
我在 Python 模块中有类似于以下的代码:
_x = None
def set_x():
global _x
_x = # some value (will always be the same)
def worker():
if _x is None:
set_x()
在这个模块的客户端中创建的线程可以安全地调用worker()吗?
X 在模块的其他地方以只读模式使用;一旦设置它就永远不会改变。
是的,我意识到 x 可以封装在一个类中,并且线程可以在堆栈上创建自己的该类的实例,从而获得线程安全,但是为了这个问题的目的,假设基于类的实现是不可行或不可取的(例如,该模块表示一个单例,其中设置 x 的成本相对较高,我们希望尽可能不频繁地设置它)。
【问题讨论】:
-
您知道
x仅在set_x中被本地覆盖,并且将在全局范围内保持None? -
是的!接得好。谢谢克劳斯。对于这个问题,假设每个引用 x 的函数在顶部都有必要的全局语句。
标签: python multithreading thread-safety