互斥锁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