python互斥锁

互斥锁Lock 在 threading 包里面

互斥锁可以根据需要,架在自己的原子操作上面

互斥锁上锁后一定要记得释放

语法:

  • acquire 上锁
  • release 解锁
from threading import Thread, Lock

g_num = 0

def test1():
    global g_num
    for i in range(1000000):
        #上锁
        mutex.acquire()
        #多线程的不安全行为,原子操作
        g_num += 1
        #释放锁
        mutex.release()
    print("方法1完毕后 , g_num = %d"%g_num)


def test2():
    global g_num 
    for i in range(1000000):
        #上锁
        mutex.acquire()
        #多线程的不安全行为,原子操作
        g_num += 1
        #释放锁
        mutex.release()
    print("方法2完毕后 , g_num = %d"%g_num)

#创建一把互斥锁
mutex = Lock()

p1 = Thread(target = test1)
p1.start()

p2 = Thread(target = test2)
p2.start()

print("主线程执行到最后, g_num = %d"%g_num)


执行结果:

主线程执行到最后, g_num = 43237
方法1完毕后 , g_num = 1857466
方法2完毕后 , g_num = 2000000

你可能感兴趣的:(python互斥锁)