並發編程之遞歸鎖


遞歸鎖

第一種情況:同一個線程一把鎖加鎖多次,不影響執行

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

總結:

  1. 同一個線程對同一把鎖加鎖多次,不影響執行
  2. 同一個線程必須保證,加鎖的次數和解鎖的次數相同,其他線程才能夠搶到這把鎖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM