Kunci Pembaca/Penulis Ramping (SRW)
Kunci pembaca/penulis ramping (SRW) memungkinkan utas dari satu proses untuk mengakses sumber daya bersama; mereka dioptimalkan untuk kecepatan dan menempati memori yang sangat sedikit. Kunci pembaca-penulis ramping tidak dapat dibagikan di seluruh proses.
Utas pembaca membaca data dari sumber daya bersama sedangkan utas penulis menulis data ke sumber daya bersama. Ketika beberapa utas membaca dan menulis menggunakan sumber daya bersama, kunci eksklusif seperti bagian penting atau mutex dapat menjadi hambatan jika utas pembaca berjalan terus menerus tetapi operasi tulis jarang terjadi.
Kunci SRW menyediakan dua mode di mana utas dapat mengakses sumber daya bersama:
Mode bersama, yang memberikan akses baca-saja bersama ke beberapa utas pembaca, yang memungkinkan mereka membaca data dari sumber daya bersamaan secara bersamaan. Jika operasi baca melebihi operasi tulis, konkurensi ini meningkatkan performa dan throughput dibandingkan dengan bagian penting.
Catatan
Kunci SRW mode bersama tidak boleh diperoleh secara rekursif karena ini dapat menyebabkan kebuntuan ketika dikombinasikan dengan akuisisi eksklusif.
Mode eksklusif, yang memberikan akses baca/tulis ke satu utas penulis pada satu waktu. Ketika kunci telah diperoleh dalam mode eksklusif, tidak ada utas lain yang dapat mengakses sumber daya bersama sampai penulis melepaskan kunci.
Catatan
Kunci SRW mode eksklusif tidak dapat diperoleh secara rekursif. Jika utas mencoba memperoleh kunci yang sudah disimpannya, upaya tersebut akan gagal (untuk TryAcquireSRWLockExclusive) atau kebuntuan (untuk AcquireSRWLockExclusive)
Kunci SRW tunggal dapat diperoleh dalam salah satu mode; utas pembaca dapat memperolehnya dalam mode bersama sedangkan utas penulis dapat memperolehnya dalam mode eksklusif. Tidak ada jaminan tentang urutan di mana utas yang meminta kepemilikan akan diberikan kepemilikan; Kunci SRW tidak adil atau FIFO.
Kunci SRW adalah ukuran pointer. Keuntungannya adalah cepat untuk memperbarui status kunci. Kerugiannya adalah bahwa sangat sedikit informasi status yang dapat disimpan, sehingga kunci SRW tidak mendeteksi penggunaan rekursif yang salah dalam mode bersama. Selain itu, utas yang memiliki kunci SRW dalam mode bersama tidak dapat meningkatkan kepemilikannya atas kunci ke mode eksklusif.
Pemanggil harus mengalokasikan struktur SRWLOCK dan menginisialisasinya dengan memanggil InitializeSRWLock (untuk menginisialisasi struktur secara dinamis) atau menetapkan SRWLOCK_INIT konstanta ke variabel struktur (untuk menginisialisasi struktur secara statis).
Anda dapat menggunakan Pemverifikasi Aplikasi untuk menemukan penggunaan kunci SRW rekursif (reentrant).
Berikut ini adalah fungsi kunci SRW.
Fungsi kunci SRW | Deskripsi |
---|---|
AcquireSRWLockExclusive | Memperoleh kunci SRW dalam mode eksklusif. |
AcquireSRWLockshared | Memperoleh kunci SRW dalam mode bersama. |
InitializeSRWLock | Menginisialisasi kunci SRW. |
ReleaseSRWLockExclusive | Merilis kunci SRW yang dibuka dalam mode eksklusif. |
ReleaseSRWLockshared | Melepaskan kunci SRW yang dibuka dalam mode bersama. |
SleepConditionVariableSRW | Tidur pada variabel kondisi yang ditentukan dan melepaskan kunci yang ditentukan sebagai operasi atomik. |
TryAcquireSRWLockExclusive | Mencoba memperoleh kunci pembaca/penulis ramping (SRW) dalam mode eksklusif. Jika panggilan berhasil, utas panggilan mengambil kepemilikan kunci. |
TryAcquireSRWLockShared | Mencoba memperoleh kunci pembaca/penulis ramping (SRW) dalam mode bersama. Jika panggilan berhasil, utas panggilan mengambil kepemilikan kunci. |
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk