一、互斥锁的作用:
保证多线程下数据的正确性—某个线程要共享数据时,先将其锁定,此时资源的状态为“锁定”,
其他线程不能更改;直到该线程释放资源,将资源的状态变成“非锁定”,其他的线程才能再次锁定该资源。
互斥锁保证了每次只有一个线程进入写入操作,从而保证了多线程情况下数据的正确性
二、互斥锁的实例:
from threading import Lock
from threading import Thread
total = 0
def maipiao():
global total
for i in range(10000000):
flag = mutex.acquire(True) #上锁:
if flag: #判断是否上锁:
total+=1
mutex.release() #释放锁
mutex = Lock() #实例化
if name == ‘main’:
t_list = []
for i in range(2):
t = Thread(target=maipiao)
t.start()
t_list.append(t)
# t.join()#阻塞----相当于单线程
# for t in t_list:
# t.join() #等上面的程序执行完才会执行下面的程序:
print('total:', total)
三、小结:
(1)锁的好处:
确保了某段关键代码只能由一个线程从头到尾完整地执行。
(2)锁的坏处:
阻止了多线程并发执行,包含锁的某段代码实际上只能以单线程模式执行,效率就大大地下降了
由于可以存在多个锁,不同的线程持有不同的锁,并试图获取对方持有的锁时,可能会造成死锁