繁体   English   中英

在python的Threading模块下锁定全局变量

[英]locking global variables under the Threading module of python

让我们假设我有两个线程和一个带有线程模块的python代码中的单个全局变量。 在此代码中,只有thread-1修改全局变量的值,而thread-2只读取全局变量的值并根据该值执行其任务。

在这种情况下,我是否需要使用Lock()保护对全局变量的访问? 在C中,必须在这种条件下使用互斥锁。 然而,与GIL的python怎么样? 还是这样吗? 是否还需要Lock()?

将对象值分配给全局变量是Python中的原子操作。 其他线程无法通过在分配变量时读取它来错误地读取变量。 GIL在Python的C实现中保证了这一点,但是其他实现可以并且确实以不同的方式做出相同的保证。

如果全局变量是可变对象(如列表),并且您正在修改该对象,则它取决于您使用的方法。 像列表这样的内置对象的大多数方法都是原子的。

我不能肯定地说你不需要锁,但不知道关于该变量的目的的更多细节以及你如何使用它。 为什么thread-2需要根据该值改变其行为,如果thread-1在线程2做出决定之后更改了值,那么它是否正常? 如果不行,您可能仍需要锁定。

(C中的类似情况 - 为指针变量赋值 - 在正常情况下也是原子的,但指针赋值可以重新排序。在某些情况下可以使用它来避免C中的锁定。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM