线程之间资源竞争问题
线程之间资源竞争问题
需求:
- 定义两个函数,实现循环100万次,每循环一次给全局变量加1
- 创建两个子线程执行对应的两个函数,查看计算后的结果
# 全局变量
import threading
import time
g_num = 0
# 对g_num进行加操作
def sum_num1():
for i in range(100):
global g_num
g_num += 1
print(f'g_num1: {g_num}')
# 对g_num进行加操作
def sum_num2():
for i in range(100):
global g_num
g_num += 1
print(f'g_num2: {g_num}')
if __name__ == '__main__':
# 创建子线程
sum1_thread = threading.Thread(target=sum_num1())
sum2_thread = threading.Thread(target=sum_num2())
# 启动线程
sum1_thread.start()
time.sleep(1)
sum2_thread.start()
上述理论上输出的值应该为100、200,但可能由于两个线程共享的全局变量,会产生不一样的值。
解决办法:
- 同步:就是协调步调。按预定的先后次序进行运行。
- 线程同步的方式是互斥锁。