多线程共享全局变量
查看全局变量g_num的值受到的多个线程中的影响
import threading
import time
# 多个线程之间共享全局变量
# 用global
# 定义一个全局变量
g_num = 100
def Text1(): //函数作用:让g_num加1
global g_num
g_num += 1
print("---Text1_g_num=%d" % g_num)
def Text2(): //函数作用:查看text1执行后的g_num值是否是改变后的值
print("---Text2_g_num=%d" % g_num)
def main():
t1 = threading.Thread(target= Text1)
t2 = threading.Thread(target= Text2)
t1.start()
time.sleep(1)
t2.start()
if __name__ == '__main__':
main()
Thread传入参数的形式
t1 = threading.Thread(target=Text1, args=(g_num,))
import time
import threading
// 列表当做实参传入到线程当中
// args参数传入的是元组
// 形式:t1 = threading.Thread(target=Text1, args=(g_num,))
# 定义一个全局变量
g_num =[11,22,33]
def Text1(nums):
nums.append(44)
print("In Text1----",nums)
def Text2(nums):
time.sleep(1)
print("In Text2----",nums)
def main():
t1 = threading.Thread(target= Text1,args=(g_num,))
t2 = threading.Thread(target= Text2,args=(g_num,))
t1.start()
t2.start()
if __name__ == '__main__':
main()
多线程共享全局变量
资源竞争
import threading
import time
# global告诉python这是g_num一个全局变量
g_num = 0
def Text1(nums):
global g_num
for i in range(nums):
g_num += 1
print("In Text1----",g_num)
def Text2(nums):
global g_num
for i in range(nums):
g_num += 1
print("In Text2----",g_num)
def main():
# 分别传入100 和 1000000
t1 = threading.Thread(target= Text1,args=(1000000,)) //这个地方改值 可以是100,可以是1000000.
t2 = threading.Thread(target= Text2,args=(1000000,))
t1.start()
t2.start()
if __name__ == '__main__':
main()
当两个线程都对1个全局变量加1000000
当两个线程都对1个全局变量加100
当执行线程1未完成一个完整步骤,就去执行线程2的时候 全局变量并没有加1,所以会少很多数值。