问题:多线程共享全局变量出现的问题。
开两个子线程,全局变量是0,我们每个线程对他自加1,每个线程加一百万次,这时候就会出现问题了。每个线程都自加一百万次,照理来说,应该最后的结果是200万,但实际结果并非如此。
import threading,time
num = 0
def work1(loop):
global num
for i in range(loop):
temp = num
num = temp + 1
print('work1:',num)
def work2(loop):
global num
for i in range(loop):
temp = num
num = temp + 1
print('work2:',num)
if __name__ =='__main__':
t1 = threading.Thread(target=work1,args=(1000000,))
t2 = threading.Thread(target=work2,args=(1000000,))
t1.start()
t2.start()
输出结果:
work1: 1124566
work2: 1325798
原因:
CPU是采用时间片轮询的方式进行几个线程的执行。
假设CPU先轮询到work1(),num此时为100,在我运行到temp = num时,时间结束了!此时,赋值了&