文章目录
多线程-共享全局变量问题
多线程可能遇到的问题
假设有两个线程t1和t2,都要对一个变量g_num进行运算(+1),两个进程t1和t2分别对g_num各加10次,g_num的最终结果?
import threading
import time
g_num=0
def work1(num):
global g_num
for i in range(num):
g_num+=1
print("---in work1,g_num is %d"% g_num)
def work2(num):
global g_num
for i in range(num):
g_num+=1
print("---in work2,g_num is %d"% g_num)
print("---线程创建之前g_num:%d"%g_num)
t1=threading.Thread(target=work1,args=(10,))
t2=threading.Thread(target=work2,args=(10,))
t1.start()
t2.start()
while len(threading.enumerate())!=1:
time.sleep(1)
print("2个线程对同一个变量操作之后的最终结果:%d"%g_num)
# ---线程创建之前g_num:0
# ---in work1,g_num is 10
# ---in work2,g_num is 20
# 2个线程对同一个变量操作之后的最终结果:20
一种可能的情况:
在num=0时,t1取得num=0,此时系统把t1调度为“sleeping”的状态,t2转换为“running”的状态,t2也获得num=0。然后,t2对得到的值进行加1,并赋给num,num=1.然后,系统又将t2调度为“sleeping”的状态,把t1转换为“running”的状态。线程t1又把它之前得到的0加1后赋值给nu