共享全局变量的资源竞争
import threading
import time
num = 0
def demo1(nums):
global num
for i in range(nums):
num += 1
print("demo1---num:%d" % num)
def demo2(nums):
global num
for i in range(nums):
num += 1
print("demo2---num:%d" % num)
def main():
t1 = threading.Thread(target=demo1,args=(100,))
t2 = threading.Thread(target=demo2,args=(100,))
t1.start()
t2.start()
print("main---num:%d" % num)
执行结果:
调整参数值:
def main():
t1 = threading.Thread(target=demo1,args=(100000,))
t2 = threading.Thread(target=demo2,args=(100000,))
执行结果:
为什么值变大以后,执行结果不正确?
demo1子线程中:
for i in range(nums)
num += 1
执行以上代码时:
1.获取num的值
2.把获取到的num +1
3.把2步的结果保存到num中
demo2子线程同上
demo1与demo2在cpu中执行,cpu 以时间片轮转方式执行
查看字节码验证:
phthon字节码 - > python虚拟机来执行python字节码
import dis
def add_num(a):
a+=1
print(dis.dis(add_num))
load a
load 1
执行add
赋值给a
如何解决?可用互斥锁