首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在python的线程模块下锁定全局变量

在python的线程模块下锁定全局变量
EN

Stack Overflow用户
提问于 2012-03-08 11:26:53
回答 1查看 6K关注 0票数 4

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

在这种情况下,我是否需要使用Lock()来保护对全局变量的访问?在C中,互斥必须在这样的条件下使用。但是,python和GIL如何呢?现在还是这样吗?仍然需要Lock()吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-08 14:20:28

在Python中,将对象值赋给全局变量是一个原子操作。其他线程不能通过在赋值时读取变量来错误地读取该变量。GIL在Python的C实现中保证了这一点,但其他实现可以而且确实以不同的方式提供相同的保证。

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

不过,如果不知道该变量的用途以及如何使用它的更多细节,我就不能肯定地说你不需要锁。为什么thread-2需要根据这个值改变它的行为,如果thread-1在thread-2做出决定后立即改变了这个值,可以吗?如果它不正常,您可能仍然需要一个锁。

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

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9612484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档