线程之间资源竞争问题

线程之间资源竞争问题

需求:

  1. 定义两个函数,实现循环100万次,每循环一次给全局变量加1
  2. 创建两个子线程执行对应的两个函数,查看计算后的结果
# 全局变量
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,但可能由于两个线程共享的全局变量,会产生不一样的值。

解决办法: