Python线程中的全局变量

本文探讨了Python线程间如何共享全局变量,指出这种共享可能导致资源竞争和数据不安全性。以实例说明,由于CPU上下文切换,全局变量在多线程环境中可能被重复赋值,从而引发问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线程之间可共享全局变量

如果有修改,全看执行顺序。

多线程开发的时候共享全局变量会带来资源竞争效果。也就是数据不安全。

比如:

x=1
def t1(num):
    global x
    for i in range(num):
        x+=1
    print('t1..',x)

def t2(num):
    global x
    for i in range(num):
        x+=1
    print('t2',x)

def m():
    tt1=threading.Thread(target=t1,args=(1000000,))
    tt2=threading.Thread(target=t2,args=(1000000,))
    tt1.start()
    # time.sleep(1)
    tt2.start()

if __name__ == '__main__':
    m()

输出结果是:

>>>t1.. 1306304
>>>t2 1401359

原因是,Python底层的+=算法分为三步,当取得的全局变量已经计算,但还没赋值过去时,CPU切换到另

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值