---------Python基础编程---------
Author : AI菌
【内容讲解】
一、线程之间共享全局变量数据出现错误问题的解决办法:线程同步
二、线程同步的理解:
线程同步: 就是保证同一时刻只能有一个线程去操作全局变量;
同步: 就是协同步调,按预定的先后次序进行运行;
注意:同步不是一起执行的意思,需要与日常生活中的同步区分开。
二、线程同步的两种方式:
1、线程等待(join)
2、互斥锁
【代码演示】
"""
一、线程之间共享全局变量数据出现错误问题的解决办法:线程同步
二、线程同步的理解:
线程同步: 就是保证同一时刻只能有一个线程去操作全局变量;
同步: 就是协同步调,按预定的先后次序进行运行;
注意:同步不是一起执行的意思,需要与日常生活中的同步区分开。
二、线程同步的两种方式:
1、线程等待(join)
2、互斥锁
"""
# 定义两个函数,实现循环100万次,每循环一次给全局变量加1
# 创建两个子线程执行对应的两个函数,查看计算后的结果
# 如果计算过程不出错,两个子线程执行完毕,全局变量的值应该是200万
import threading
# 定义全局变量
g_num = 0
# 循环1000000次,每循环一次给全局变量加1
def calc_num1():
# 声明此处加上global表示要修改全局变量的内存地址
global g_num
for i in range(1000000):
g_num += 1
print("calc_num1:", g_num)
# 循环1000000次,每循环一次给全局变量加1
def calc_num2():
# 声明此处加上global表示要修改全局变量的内存地址
global g_num
for i in range(1000000):
g_num += 1
print("calc_num2:", g_num)
if __name__ == '__main__':
# 创建第一个子线程
first_thread = threading.Thread(target=calc_num1)
# 创建第二个子线程
second_thread = threading.Thread(target=calc_num2)
# 启动线程执行任务
first_thread.start()
# 主线程等待第一个子线程执行完成以后程序再执行(线程同步)
first_thread.join()
# 启动线程执行任务
second_thread.start()
【运行结果】
calc_num1: 1000000
calc_num2: 2000000