互斥锁可以对共享数据进行锁定,保证同一时刻只有一个线程可以执行,对于加锁的部分,只有单线程的效果,,对于整体而言,还是多线程
注意:互斥锁是多个线程一起去抢,抢到就先执行,没有抢到就继续等待,等锁使用完后释放,其他线程才可以去抢这个锁
锁的创建:mutex = thread.Lock()
上锁:mutex.acquire()
释放锁:mutex.release()
注意:使用互斥锁要避免死锁情况出现,死锁产生的原因就是没有及时或者在正确的位置释放锁
import threading
import time
num = 0
def sum_num1():
"""加锁"""
mutex.acquire()
for i in range(1000000):
global num
num += 1
"""释放锁"""
# mutex.release()
print("sum_num1:",num)
def sum_num2():
"""加锁"""
mutex.acquire()
for i in range(1000000):
global num
num += 1
mutex.release()
print("sum_num2:",num)
if __name__ == '__main__':
"""创建锁"""
mutex = threading.Lock()
"""创建线程对象并启动"""
sum1_thread = threading.Thread(target=sum_num1)
sum2_thread = threading.Thread(target=sum_num2)
sum1_thread.start()
sum2_thread.start()