Bagikan melalui


IReadWriteLock Antarmuka

Definisi

Mempertahankan ReadWriteLock sepasang terkait Lock locks, satu untuk operasi baca-saja dan satu untuk menulis.

[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
Turunan
Atribut
Penerapan

Keterangan

Mempertahankan ReadWriteLock sepasang terkait Lock locks, satu untuk operasi baca-saja dan satu untuk menulis. Kunci baca #readLock dapat dipegang secara bersamaan oleh beberapa utas pembaca, selama tidak ada penulis. Kunci tulis #writeLock bersifat eksklusif.

Semua ReadWriteLock implementasi harus menjamin bahwa efek writeLock sinkronisasi memori operasi (seperti yang ditentukan dalam Lock antarmuka) juga berlaku sehubungan dengan yang terkait readLockdengan . Artinya, utas yang berhasil memperoleh kunci baca akan melihat semua pembaruan yang dibuat pada rilis kunci tulis sebelumnya.

Kunci baca-tulis memungkinkan tingkat konkurensi yang lebih besar dalam mengakses data bersama daripada yang diizinkan oleh kunci pengecualian bersama. Ini mengeksploitasi fakta bahwa meskipun hanya satu utas pada satu waktu (<>utas em writer</em>) dapat memodifikasi data bersama, dalam banyak kasus sejumlah utas dapat membaca data secara bersamaan (oleh karena itu <em>pembaca</utas em>). Secara teori, peningkatan konkurensi yang diizinkan oleh penggunaan kunci baca-tulis akan menyebabkan peningkatan performa atas penggunaan kunci pengecualian bersama. Dalam praktiknya, peningkatan konkurensi ini hanya akan sepenuhnya diwujudkan pada multi-prosesor, dan kemudian hanya jika pola akses untuk data bersama cocok.

Apakah kunci baca-tulis akan meningkatkan performa atas penggunaan kunci pengecualian bersama tergantung pada frekuensi yang dibaca data dibandingkan dengan yang dimodifikasi, durasi operasi baca dan tulis, dan ketidakcocokan untuk data - yaitu, jumlah utas yang akan mencoba membaca atau menulis data pada saat yang sama. Misalnya, koleksi yang awalnya diisi dengan data dan kemudian jarang dimodifikasi, sementara sering dicari (seperti direktori dari beberapa jenis) adalah kandidat yang ideal untuk penggunaan kunci baca-tulis. Namun, jika pembaruan menjadi sering maka data menghabiskan sebagian besar waktunya dikunci secara eksklusif dan ada sedikit, jika ada peningkatan konkurensi. Selanjutnya, jika operasi baca terlalu pendek overhead dari implementasi kunci baca-tulis (yang secara inheren lebih kompleks daripada kunci pengecualian bersama) dapat mendominasi biaya eksekusi, terutama karena banyak implementasi kunci baca-tulis masih menserialisasikan semua utas melalui bagian kecil kode. Pada akhirnya, hanya pembuatan profil dan pengukuran yang akan menetapkan apakah penggunaan kunci baca-tulis cocok untuk aplikasi Anda.

Meskipun operasi dasar kunci baca-tulis lurus ke depan, ada banyak keputusan kebijakan yang harus dibuat oleh implementasi, yang dapat memengaruhi efektivitas kunci baca-tulis dalam aplikasi tertentu. Contoh kebijakan ini meliputi: <ul><li>Menentukan apakah akan memberikan kunci baca atau kunci tulis, ketika pembaca dan penulis menunggu, pada saat penulis melepaskan kunci tulis. Preferensi penulis umum, karena penulisan diharapkan pendek dan jarang. Preferensi pembaca kurang umum karena dapat menyebabkan penundaan panjang untuk penulisan jika pembaca sering dan berumur panjang seperti yang diharapkan. Adil, atau " dalam urutan;; implementasi juga dimungkinkan.

<li>Menentukan apakah pembaca yang meminta kunci baca saat pembaca aktif dan penulis sedang menunggu, diberikan kunci baca. Preferensi kepada pembaca dapat menunda penulis tanpa batas waktu, sementara preferensi kepada penulis dapat mengurangi potensi konkurensi.

<li>Menentukan apakah kunci masuk kembali: dapatkah utas dengan kunci tulis memperolehnya kembali? Dapatkah ia memperoleh kunci baca sambil menahan kunci tulis? Apakah kunci baca itu sendiri masuk kembali?

<li>Dapatkah kunci tulis diturunkan ke kunci baca tanpa mengizinkan penulis intervensi? Dapatkah kunci baca ditingkatkan ke kunci tulis, disukai pembaca atau penulis tunggu lainnya?

</ul> Anda harus mempertimbangkan semua hal ini saat mengevaluasi kesesuaian implementasi tertentu untuk aplikasi Anda.

Ditambahkan dalam 1.5.

Dokumentasi Java untuk java.util.concurrent.locks.ReadWriteLock.

Bagian halaman ini adalah modifikasi berdasarkan pekerjaan yang dibuat dan dibagikan oleh Proyek Sumber Terbuka Android dan digunakan sesuai dengan istilah yang dijelaskan dalam Lisensi Atribusi Creative Commons 2.5.

Properti

Handle

Mendapatkan nilai JNI dari objek Android yang mendasar.

(Diperoleh dari IJavaObject)
JniIdentityHashCode

Mengembalikan nilai java.lang.System.identityHashCode() untuk instans yang dibungkus.

(Diperoleh dari IJavaPeerable)
JniManagedPeerState

Status serekan terkelola.

(Diperoleh dari IJavaPeerable)
JniPeerMembers

Akses anggota dan dukungan pemanggilan.

(Diperoleh dari IJavaPeerable)
PeerReference

Mengembalikan instans objek Java yang dibungkus JniObjectReference .

(Diperoleh dari IJavaPeerable)

Metode

Disposed()

Dipanggil ketika instans telah dibuang.

(Diperoleh dari IJavaPeerable)
DisposeUnlessReferenced()

Jika tidak ada referensi yang luar biasa untuk instans ini, maka panggilan Dispose(); jika tidak, tidak melakukan apa pun.

(Diperoleh dari IJavaPeerable)
Finalized()

Dipanggil ketika instans telah diselesaikan.

(Diperoleh dari IJavaPeerable)
ReadLock()

Mengembalikan kunci yang digunakan untuk membaca.

SetJniIdentityHashCode(Int32)

Atur nilai yang dikembalikan oleh JniIdentityHashCode.

(Diperoleh dari IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Mempertahankan ReadWriteLock sepasang terkait Lock locks, satu untuk operasi baca-saja dan satu untuk menulis.

(Diperoleh dari IJavaPeerable)
SetPeerReference(JniObjectReference)

Atur nilai yang dikembalikan oleh PeerReference.

(Diperoleh dari IJavaPeerable)
UnregisterFromRuntime()

Batalkan pendaftaran instans ini sehingga runtime tidak akan mengembalikannya dari pemanggilan di masa mendatang Java.Interop.JniRuntime+JniValueManager.PeekValue .

(Diperoleh dari IJavaPeerable)
WriteLock()

Mengembalikan kunci yang digunakan untuk menulis.

Metode Ekstensi

JavaCast<TResult>(IJavaObject)

Melakukan konversi jenis yang diperiksa runtime Bahasa Umum Android.

JavaCast<TResult>(IJavaObject)

Mempertahankan ReadWriteLock sepasang terkait Lock locks, satu untuk operasi baca-saja dan satu untuk menulis.

GetJniTypeName(IJavaPeerable)

Mempertahankan ReadWriteLock sepasang terkait Lock locks, satu untuk operasi baca-saja dan satu untuk menulis.

Berlaku untuk