递归锁
第一种情况:同一个线程一把锁加锁多次,不影响执行
from threading import RLock,currentThread,Thread
r = RLock()
r.acquire()
r.acquire()
print("over")
over
第二种情况:多线程必须保证,加锁的次数和解锁的次数相同,其他线程才能够抢到这把锁
from threading import RLock,currentThread,Thread
import time
r = RLock()
def task():
#r.acquire() # 如果增加这行代码,程序将无法结束
r.acquire()
time.sleep(2)
print(currentThread().name)
r.release() # 只释放了一次,但加锁了两次
def task2():
r.acquire() # 出现了死锁的情况
time.sleep(2)
print(currentThread().name)
r.release()
Thread(target=task).start()
Thread(target=task2).start()
Thread-1
Thread-2
总结:
- 同一个线程对同一把锁加锁多次,不影响执行
- 同一个线程必须保证,加锁的次数和解锁的次数相同,其他线程才能够抢到这把锁