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 檔。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。
屬性
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) |
|