全局变量数据错误的解决办法

线程同步: 保证同一时刻只能有一个线程去操作全局变量 同步: 就是协同步调,按预定的先后次序进行运行。如:你说完,我再说, 好比现实生活中的对讲机

线程同步的方式:

线程等待(join)
互斥锁
线程等待的代码

import threading

定义全局变量

g_num = 0

循环1000000次每次给全局变量加1

def sum_num1():
for i in range(1000000):
global g_num
g_num += 1

print("sum1:", g_num)

循环1000000次每次给全局变量加1

def sum_num2():
for i in range(1000000):
global g_num
g_num += 1
print(“sum2:”, g_num)

if name == ‘main’:
# 创建两个线程
first_thread = threading.Thread(target=sum_num1)
second_thread = threading.Thread(target=sum_num2)

# 启动线程
first_thread.start()
# 主线程等待第一个线程执行完成以后代码再继续执行,让其执行第二个线程
# 线程同步: 一个任务执行完成以后另外一个任务才能执行,同一个时刻只有一个任务在执行
first_thread.join()
# 启动线程
second_thread.start()

执行结果:
sum1: 1000000
sum2: 2000000

由此得出结论

  1. 多个线程同时对同一个全局变量进行操作,会有可能出现资源竞争数据错误的问题
  2. 线程同步方式可以解决资源竞争数据错误问题,但是这样有多任务变成了单任务。

你可能感兴趣的:(Python)