线程之间可共享全局变量

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

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

比如:

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切换到另一个线程运行完后再切回来,tt1会继续讲前面的赋值进行,所以全局变量会重复赋值。

给全局变量赋值,可能只是取得全局变量还没赋值时,CPU就切换了。比如在p2处被赋值了,CPU切换到p1时还是按照之前的计算值赋值给全局变量。

Python线程中的全局变量

相关文章:

  • 2021-08-07
  • 2022-12-23
  • 2022-12-23
  • 2021-04-29
  • 2021-12-04
  • 2022-12-23
  • 2021-10-17
  • 2022-12-23
猜你喜欢
  • 2022-02-06
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-03-06
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案