遞歸鎖
第一種情況:同一個線程一把鎖加鎖多次,不影響執行
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
總結:
- 同一個線程對同一把鎖加鎖多次,不影響執行
- 同一個線程必須保證,加鎖的次數和解鎖的次數相同,其他線程才能夠搶到這把鎖