IReadWriteLock Antarmuka
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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 readLock
dengan . 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 |
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 |
Finalized() |
Dipanggil ketika instans telah diselesaikan. (Diperoleh dari IJavaPeerable) |
ReadLock() |
Mengembalikan kunci yang digunakan untuk membaca. |
SetJniIdentityHashCode(Int32) |
Atur nilai yang dikembalikan oleh |
SetJniManagedPeerState(JniManagedPeerStates) |
Mempertahankan |
SetPeerReference(JniObjectReference) |
Atur nilai yang dikembalikan oleh |
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 |
GetJniTypeName(IJavaPeerable) |
Mempertahankan |