一、线程之间共享全局变量
1、什么时候会出现错误?
解答:多个线程同时操作全局变量时,可能会出现错误。
2、造成错误的原因
解答:这是由于CPU调度机制造成的。
3、线程同步
解答:
保证同一时刻只能一个线程去操作全局变量。
同步:协同步调,按预定的先后次序进行运行。(类似于生活中的对讲机。)
4、通过两种线程同步的方式解决以上问题。
线程等待(join方法),按顺序执行
互斥锁,不按顺序执行
二、线程之间共享全局变量演示
1、要求:定义两个函数,实现循环100万次,每循环一次给全局变量加1操作。
2、共享全局变量错误的代码
from threading import * from time import * g_num = 0 def sum_num1(): for i in range(1000000): global g_num g_num += 1 print("sum1:", g_num) def sum_num2(): for i in range(1000000): global g_num g_num += 1 print("sum2:", g_num) if __name__ == "__main__": t1 = Thread(target=sum_num1) t2 = Thread(target=sum_num2) t1.start() t2.start()
运行结果:
3、共享全局变量正确的代码,线程等待(join)
from threading import * from time import * g_num = 0 def sum_num1(): for i in range(1000000): global g_num g_num += 1 print("sum1:", g_num) def sum_num2(): for i in range(1000000): global g_num g_num += 1 print("sum2:", g_num) if __name__ == "__main__": t1 = Thread(target=sum_num1) t2 = Thread(target=sum_num2) t1.start() t1.join() # 主线程等待t1运行结束后再执行t2 t2.start()
运行结果: