在ReentrantReadWriteLock
文檔中,說:ReentrantReadWriteLock - 爲什麼讀者不能獲取作家的鎖?
writer can acquire the read lock, but not vice-versa
如果我理解正確的話就意味着,從相同線程可以執行:
//thread1
lock.writeLock().lock()
lock.readLock().lock()
print("this line executes")
這是有道理的:如果你已經鎖定write
沒有其他線程可以輸入鎖定的代碼。但是如果你鎖定了read
,如果沒有其他線程鎖定read
,爲什麼不能在同一線程中輸入write
塊?所以這不起作用:
//thread1
lock.readLock().lock()
lock.writeLock().lock()
print("this line doesn't execute")
你爲什麼在同一個線程鎖定write
之前解鎖read
?
如果您打算讀取和寫入,則不需要獲取*讀寫鎖。簡單地獲取寫入將使您能夠執行此操作。同樣,一旦讀取鎖定被執行,在讀取鎖定被釋放之前不能進行寫入鎖定。 – Michael