簡體   English   中英

ReentrantReadWriteLock中的讀寫鎖是否有某種關聯?

[英]Are read and write locks in ReentrantReadWriteLock somehow related?

請多解釋一下合同。 我無法弄清楚ReentrantReadWriteLock包含的兩個鎖是否以某種方式相關? 或者這些只是一捆兩個正常的鎖?

它允許多個線程同時讀取資源,但需要線程等待獨占鎖才能寫入資源。

規則是:

  • 幾個讀者可以同時共享資源。 如果您有讀鎖定,則可以安全地獲取另一個讀鎖定。 共享鎖的最大數量為1111 1111 1111 1111
  • 如果您有讀鎖定,則無法獲得寫鎖定
  • 如果您有寫鎖定,則無法在任何其他線程中獲取讀鎖定。
  • 當任何其他線程中沒有活動的作者時,讀者可以訪問該資源。
  • 如果您有寫鎖定,則可以在同一個線程中獲取另一個寫鎖定。 線程可以擁有的最大獨占鎖數是1111 1111 1111 1111
  • 當沒有其他讀者或編寫者(來自不同的線程)處於活動狀態時,編寫者可以訪問該資源。
  • 喜歡作家超過讀者。 也就是說,如果編寫器正在等待鎖定,則不允許來自其他線程的新讀者訪問該資源。 現有讀者可以繼續使用該資源,直到他們釋放鎖定。 這可以防止所謂的“作家飢餓”。
  • 允許從寫鎖定降級到讀鎖定,通過獲取寫鎖定,然后讀取鎖定然后釋放寫鎖定。 但是,無法從讀鎖定升級到寫鎖定。

在內部,鎖定狀態(c)由int值維護。 在這種情況下,由於我們有讀寫鎖,因此它在邏輯上分為兩個短路:較低的一個表示獨占(寫入)鎖定保持計數,而較高的一個表示共享(讀取器)保持計數。

假設當前的鎖定狀態是c = xxxx xxxx xxxx xxxx yyyy yyyy yyyy yyyy那么讀取器鎖定數是高位xxxx xxxx xxxx xxxx

作家鎖的數量是低位yyyy yyyy yyyy yyyy

如果線程正在等待Read Lock它是共享的,但是當線程想要獲取寫鎖定時,只允許該線程進行與互斥相同的訪問。

因此允許任何一個操作。 if lock is held by readers and thread request write lock no more readers are allowed to acquire read lock until thread which has acquired write lock release it

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM