同步锁Lock(互斥锁)

时间:2023-03-09 02:18:05
同步锁Lock(互斥锁)
同步锁作用: 在我当前包含(lock.acquire() 和 lock.release()之间 )的代码没有执行完成,不进行线程切换,必须等我执行完了,下一个线程才能继续执行(为什么要用同步锁,假如我们同时在操作一个数据的时候,比如数字100,10个线程同时操作他减1的时候,每个线程减10次,我们想要拿到结果为0,这时候没锁的情况下;得到的结果会不准确)

#-*-conding:utf-8-*-
import threading
import time lock = threading.Lock() #创建同步锁对象
n = 100
def add():
global n
lock.acquire() #加上锁
temp = n
time.sleep(0.01)
n = temp - 1
lock.release() #释放锁 l = []
for i in range(100):
t = threading.Thread(target=add)
t.start()
l.append(t) for r in l:
r.join()
print(n)