IReadWriteLock インターフェイス

定義

ReadWriteLockは、関連付けられたLock locksのペアを保持します。1 つは読み取り専用操作用、1 つは書き込み用です。

[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のペアを保持します。1 つは読み取り専用操作用、1 つは書き込み用です。 #readLock 読み取りロックは、ライターがない限り、複数のリーダー スレッドによって同時に保持される可能性があります。 #writeLock 書き込みロックは排他的です。

すべてのReadWriteLock実装では、(Lock インターフェイスで指定されている) writeLock操作のメモリ同期効果も、関連付けられているreadLockに対して保持されることを保証する必要があります。 つまり、スレッドが正常に読み取りロックを取得すると、書き込みロックの以前のリリースで行われたすべての更新が表示されます。

読み取り/書き込みロックを使用すると、共有データへのアクセスにおいて、相互排他ロックによって許可されるよりも高いレベルのコンカレンシーが可能になります。 これは、一度に 1 つのスレッド ( <em>writer</em> スレッド) のみが共有データを変更できる一方で、多くの場合、任意の数のスレッドがデータを同時に読み取ることができるという事実を悪用します (そのため、 <em>reader</em> スレッド)。 理論的には、読み取り/書き込みロックの使用によって許可されるコンカレンシーの増加は、相互除外ロックの使用に対するパフォーマンスの向上につながります。 実際には、このコンカレンシーの増加は、マルチプロセッサでのみ完全に実現され、共有データのアクセス パターンが適切な場合にのみ実現されます。

読み取り/書き込みロックによって、相互除外ロックの使用に対するパフォーマンスが向上するかどうかは、データが変更される頻度、読み取りと書き込み操作の期間、およびデータの競合 (つまり、同時にデータの読み取りまたは書き込みを試みるスレッドの数) によって異なります。 たとえば、データが最初に設定され、その後ほとんど変更されないコレクションが、頻繁に検索される (何らかの種類のディレクトリなど) 場合は、読み取り/書き込みロックを使用する場合に最適です。 ただし、更新が頻繁になると、データはほとんどの時間を排他的にロックされ、コンカレンシーが増加してもほとんど発生しません。 さらに、読み取り操作が短すぎると、読み取り/書き込みロックの実装のオーバーヘッド (本質的に相互除外ロックよりも複雑) が実行コストを上回る可能性があります。特に、多くの読み取り/書き込みロック実装では、コードの小さなセクションを介してすべてのスレッドがシリアル化されます。 最終的には、プロファイリングと測定のみが、読み取り/書き込みロックの使用がアプリケーションに適しているかどうかを確立します。

読み取り/書き込みロックの基本的な操作は簡単ですが、実装で行う必要があるポリシーの決定は多数あります。これは、特定のアプリケーションでの読み取り/書き込みロックの有効性に影響を与える可能性があります。 これらのポリシーの例としては、 <ul><li>ライターが書き込みロックを解放するときに、読み取りロックまたは書き込みロックを許可するかどうかを決定します。 書き込みは短く、頻度が低い場合が予想されるため、ライターの優先設定は一般的です。 リーダーの優先設定は、読者が予想どおりに頻繁かつ有効期間が長い場合に、書き込みに長い遅延を招く可能性があるため、あまり一般的ではありません。 公正、または量子;in-order>実装も可能です。

<li>リーダーがアクティブでライターが待機している間に読み取りロックを要求するリーダーに読み取りロックが付与されているかどうかを示します。 リーダーに優先すると、ライターが無期限に遅延する可能性があります。一方、ライターを優先すると、コンカレンシーの可能性が低下する可能性があります。

<li>ロックが再入可能かどうかを判断する:書き込みロックを持つスレッドはそれを再取得できますか? 書き込みロックを保持している間に読み取りロックを取得できますか? 読み取りロック自体は再入可能ですか?

<li>書き込みロックは、間に入るライターを許可せずに読み取りロックにダウングレードできますか? 他の待機中のリーダーまたはライターに優先して、読み取りロックを書き込みロックにアップグレードできますか?

</ul> アプリケーションの特定の実装の適合性を評価するときは、これらすべてのことを考慮する必要があります。

1\.5 で追加されました。

Javaドキュメント。

このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。

プロパティ

名前 説明
Handle

基になる Android オブジェクトの JNI 値を取得します。

(継承元 IJavaObject)
JniIdentityHashCode

ラップされたインスタンスの java.lang.System.identityHashCode() の値を返します。

(継承元 IJavaPeerable)
JniManagedPeerState

マネージド ピアの状態。

(継承元 IJavaPeerable)
JniPeerMembers

メンバー アクセスと呼び出しのサポート。

(継承元 IJavaPeerable)
PeerReference

ラップされたJava オブジェクト インスタンスのJniObjectReferenceを返します。

(継承元 IJavaPeerable)

メソッド

名前 説明
Disposed()

インスタンスが破棄されたときに呼び出されます。

(継承元 IJavaPeerable)
DisposeUnlessReferenced()

このインスタンスへの未処理の参照がない場合は、 Dispose()を呼び出します。それ以外の場合は何も実行しません。

(継承元 IJavaPeerable)
Finalized()

インスタンスが終了したときに呼び出されます。

(継承元 IJavaPeerable)
ReadLock()

読み取りに使用するロックを返します。

SetJniIdentityHashCode(Int32)

JniIdentityHashCodeによって返される値を設定します。

(継承元 IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

ReadWriteLockは、関連付けられたLock locksのペアを保持します。1 つは読み取り専用操作用、1 つは書き込み用です。

(継承元 IJavaPeerable)
SetPeerReference(JniObjectReference)

PeerReferenceによって返される値を設定します。

(継承元 IJavaPeerable)
UnregisterFromRuntime()

ランタイムが将来の Java.Interop.JniRuntime+JniValueManager.PeekValue 呼び出しから返されないように、このインスタンスの登録を解除します。

(継承元 IJavaPeerable)
WriteLock()

書き込みに使用するロックを返します。

拡張メソッド

名前 説明
GetJniTypeName(IJavaPeerable)

インスタンス selfの型の JNI 名を取得します。

JavaAs<TResult>(IJavaPeerable)

selfを強制的にTResult入力し、強制型がJava側で有効であることを確認します。

JavaCast<TResult>(IJavaObject)

Android ランタイムチェック型変換を実行します。

JavaCast<TResult>(IJavaObject)

ReadWriteLockは、関連付けられたLock locksのペアを保持します。1 つは読み取り専用操作用、1 つは書き込み用です。

TryJavaCast<TResult>(IJavaPeerable, TResult)

selfを強制的にTResult入力し、強制型がJava側で有効であることを確認します。

適用対象