IReadWriteLock 介面
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
ReadWriteLock
會維護一對相關聯的 Lock locks
,一個用於唯讀作業,另一個用於寫入。
[Android.Runtime.Register("java/util/concurrent/locks/ReadWriteLock", "", "Java.Util.Concurrent.Locks.IReadWriteLockInvoker")]
public interface IReadWriteLock : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/util/concurrent/locks/ReadWriteLock", "", "Java.Util.Concurrent.Locks.IReadWriteLockInvoker")>]
type IReadWriteLock = interface
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- 衍生
- 屬性
- 實作
備註
ReadWriteLock
會維護一對相關聯的 Lock locks
,一個用於唯讀作業,另一個用於寫入。 #readLock 讀取鎖定可由多個讀取器線程同時保留,只要沒有寫入器即可。 #writeLock 寫入鎖定是獨佔的。
所有ReadWriteLock
實作都必須保證作業的writeLock
記憶體同步處理效果 (如介面中所Lock
指定,) 也會保留與相關聯的 相關 。readLock
也就是說,成功取得讀取鎖定的線程將會看到在舊版寫入鎖定時所做的所有更新。
讀寫鎖定允許存取共享數據的並行程度高於相互排除鎖定所允許的並行。 它會利用事實,雖然一次只有單一線程 (<em 寫入器</em> 線程) 可以修改共用數據,在許多情況下,任何數目的線程都可以同時讀取數據 (,因此 <em>讀取<器/em>> 線程) 。 理論上,使用讀寫鎖定所允許的並行存取增加會導致使用相互排除鎖定的效能改善。 實際上,此併行增加只會在多處理器上完全實現,然後只有在共用數據的存取模式適合時。
讀取和寫入鎖定是否可改善使用相互排除鎖定的效能,取決於數據相較於修改的頻率、讀取和寫入作業的持續時間,以及數據的爭用次數,也就是嘗試同時讀取或寫入數據的線程數目。 例如,一開始填入數據的集合,之後不常修改,而經常搜尋 (例如某種目錄的目錄,) 是使用讀寫鎖定的理想候選專案。 不過,如果更新經常發生,則數據會花費大部分的時間被獨佔鎖定,而且如果並行增加,則很少。 此外,如果讀取作業太短,則讀寫鎖定實作的額外負荷 (原本就比相互排除鎖定複雜,) 可能會影響執行成本,特別是因為許多讀寫鎖定實作仍會透過社區段的程式代碼串行化所有線程。 最後,只有分析與測量會建立是否適合您的應用程式使用讀寫鎖定。
雖然讀寫鎖定的基本作業是直接的,但實作必須做出許多原則決策,這可能會影響指定應用程式中讀寫鎖定的有效性。 這些原則的範例包括: <ul><li>判斷是否要授與讀取鎖定或寫入鎖定,當讀取器和寫入器正在等候時,寫入器釋放寫入鎖定時。 寫入器喜好設定很常見,因為寫入預期為簡短且不常。 讀取器喜好設定較不常見,因為讀取器頻繁且長期如預期般延遲寫入。 公平或 &商;依序&商;您也可以實作。
<li>判斷讀取器是否在讀取器作用中且寫入器正在等候時要求讀取鎖定的讀取器,是否獲得讀取鎖定。 讀取器的喜好設定可能會無限期地延遲寫入器,而對寫入器的喜好設定可能會降低並行的可能性。
<li>判斷鎖定是否重新進入:是否可以重新取得具有寫入鎖定的線程? 是否可以在保留寫入鎖定時取得讀取鎖定? 讀取鎖定本身是否重新進入?
<li>是否可以將寫入鎖定降級為讀取鎖定,而不允許插入寫入器? 讀取鎖定是否可以升級為寫入鎖定,而偏好使用其他等候的讀取器或寫入器?
</ul> 在評估應用程式指定實作的適用性時,您應該考慮所有這些事項。
在 1.5 中新增。
的 java.util.concurrent.locks.ReadWriteLock
Java 檔。
此頁面的部分是根據 原始碼專案所建立和共用的工作進行修改,並根據 中所述的詞彙使用。
屬性
Handle |
取得基礎 Android 物件的 JNI 值。 (繼承來源 IJavaObject) |
JniIdentityHashCode |
傳回包裝實例的 |
JniManagedPeerState |
受控對等的狀態。 (繼承來源 IJavaPeerable) |
JniPeerMembers |
成員存取和調用支援。 (繼承來源 IJavaPeerable) |
PeerReference |
傳 JniObjectReference 回已包裝 Java 物件實例的 。 (繼承來源 IJavaPeerable) |
方法
Disposed() |
在處置實例時呼叫。 (繼承來源 IJavaPeerable) |
DisposeUnlessReferenced() |
如果沒有這個實例的未完成參考,則呼叫 |
Finalized() |
實例完成時呼叫。 (繼承來源 IJavaPeerable) |
ReadLock() |
傳回用於讀取的鎖定。 |
SetJniIdentityHashCode(Int32) |
設定所 |
SetJniManagedPeerState(JniManagedPeerStates) |
|
SetPeerReference(JniObjectReference) |
設定所 |
UnregisterFromRuntime() |
取消註冊此實例,讓運行時間不會從未來的 Java.Interop.JniRuntime+JniValueManager.PeekValue 調用傳回它。 (繼承來源 IJavaPeerable) |
WriteLock() |
傳回用於寫入的鎖定。 |
擴充方法
JavaCast<TResult>(IJavaObject) |
執行 Android 執行時間檢查的類型轉換。 |
JavaCast<TResult>(IJavaObject) |
|
GetJniTypeName(IJavaPeerable) |
|