利用互斥锁解决线程资源竞争问题


用互斥锁解决线程资源竞争问题

概述

在python中使用使用多线程时,如果线程之间存在对资源的竞争问题,可以采用threading模块中自带的互斥锁来实现同步访问资源

代码展示

import threading
import time

# 定义一个全局变量作为共享资源
g_num = 0


def thread1(num):
    global g_num

    for i in range(num):
        mutex.acquire()  # 上锁,如果该资源已经被占用则被阻塞
        g_num += 1
        mutex.release()  # 解锁
    print("-----in test1 g_num=%d----" % g_num)


def thread2(num):
    global g_num
    for i in range(num):
        mutex.acquire()  # 上锁
        g_num += 1
        mutex.release()  # 解锁
    print("-----in test2 g_num=%d=----" % g_num)


# 创建一个互斥锁,默认是没有上锁的
mutex = threading.Lock()


def main():
    #线程传参用元组
    t1 = threading.Thread(target=thread1, args=(1000000,))
    t2 = threading.Thread(target=thread2, args=(1000000,))

    t1.start()
    t2.start()

    # 等待上面的2个线程执行完毕....
    time.sleep(2)

    print("-----in main Thread g_num = %d---" % g_num)

if __name__ == "__main__":
    main()