python,多线程共享全局变量的问题

XXX.join( ):表示同步执行(使用注意,要加在启动线程之后)

主线程等待第一个线程执行完成以后代码再继续执行,让其执行第二个线程

import threading

# 定义全局变量
g_num = 0


# 循环一次给全局变量加1
def test1():
    for i in range(1000000):
        global g_num
        g_num += 1

    print("test1:", g_num)


# 循环一次给全局变量加1
def test2():
    for i in range(1000000):
        global g_num
        g_num += 1
    print("test2:", g_num)


if __name__ == '__main__':
    # 创建两个线程
    first_thread = threading.Thread(target=test1)
    second_thread = threading.Thread(target=test2)

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


互斥锁( 同步锁 )

多个线程几乎同时修改某一个共享数据的时候,需要进行同步控制

import threading


# 定义全局变量
g_num = 0

# 创建全局互斥锁
lock = threading.Lock()


# 循环一次给全局变量加1
def test1():
    # 上锁
    lock.acquire()
    for i in range(1000000):
        global g_num
        g_num += 1

    print("test1:", g_num)
    # 释放锁
    lock.release()


# 循环一次给全局变量加1
def test2():
    # 上锁
    lock.acquire()
    for i in range(1000000):
        global g_num
        g_num += 1
    print("test2:", g_num)
    # 释放锁
    lock.release()


if __name__ == '__main__':
    # 创建两个线程
    first_thread = threading.Thread(target=test1)
    second_thread = threading.Thread(target=test2)
    first_thread.start()
    second_thread.start()

    # 提示:加上互斥锁,那个线程抢到这个锁我们决定不了,先抢到锁线程先执行,没有抢到的线程需要等待
    # 加上互斥锁多任务瞬间变成单任务,性能会下降,也就是说同一时刻只能有一个线程去执行


你可能感兴趣的:(python)