Bagikan melalui


Jenis Kunci Oportunistik

Operasi kunci oportunistik bekerja dengan empat jenis kunci oportunistik: tingkat 1, tingkat 2, batch, dan filter. Kunci oportunistik eksklusif adalah tingkat 1, batch, dan kunci filter. Jika utas memiliki jenis kunci eksklusif pada file, utas tidak dapat juga memiliki kunci tingkat 2 pada file yang sama.

Kunci Oportunistik Tingkat 1

Kunci oportunistik tingkat 1 pada file memungkinkan klien untuk membaca di depan dalam file dan menyimpan data baca di depan dan menulis dari file secara lokal. Selama klien memiliki akses satu-satunya ke file, tidak ada bahaya pada koherensi data dalam memberikan kunci oportunistik tingkat 1.

Klien dapat meminta kunci oportunistik tingkat 1 setelah membuka file. Jika tidak ada klien lain (atau tidak ada utas lain pada klien yang sama) yang membuka file, server dapat memberikan kunci oportunistik. Klien kemudian dapat menyimpan data baca dan tulis dari file secara lokal. Jika klien lain telah membuka file, maka server menolak kunci oportunistik dan klien tidak melakukan penembolokan lokal. (Server mungkin menolak kunci oportunistik karena alasan lain juga, seperti tidak mendukung kunci oportunistik.)

Ketika server membuka file yang sudah memiliki kunci oportunistik tingkat 1 di atasnya, server memeriksa status berbagi file sebelum merusak kunci oportunistik tingkat 1. Jika server memutus kunci setelah pemeriksaan ini, waktu yang dihabiskan klien dengan kunci sebelumnya untuk membersihkan cache tulisnya adalah saatnya klien yang meminta file harus menunggu. Pengeluaran waktu ini berarti bahwa kunci oportunistik tingkat 1 harus dihindari pada file yang dibuka banyak klien.

Namun, karena server memeriksa status berbagi sebelum merusak kunci, dalam kasus di mana server akan menolak permintaan terbuka karena konflik berbagi, server tidak merusak kunci. Misalnya, jika Anda telah membuka file, menolak berbagi untuk operasi tulis, dan mendapatkan kunci tingkat 1, server menolak permintaan klien lain untuk membuka file untuk ditulis bahkan sebelum memeriksa kunci Anda pada file. Dalam hal ini, kunci oportunistik Anda tidak rusak.

Untuk contoh cara kerja kunci oportunistik tingkat 1, lihat Contoh Kunci Oportunistik Tingkat 1. Untuk informasi selengkapnya tentang melanggar kunci oportunistik, lihat Melanggar Kunci Oportunistik.

Kunci Oportunistik Tingkat 2

Kunci oportunistik tingkat 2 memberi tahu klien bahwa ada beberapa klien bersamaan dari file dan belum ada yang memodifikasinya. Kunci ini memungkinkan klien untuk melakukan operasi baca dan mendapatkan atribut file menggunakan informasi lokal cache atau read-ahead, tetapi klien harus mengirim semua permintaan lain (seperti untuk operasi tulis) ke server. Aplikasi Anda harus menggunakan kunci oportunistik tingkat 2 ketika Anda mengharapkan aplikasi lain menulis ke file secara acak atau membaca file secara acak atau berurutan.

Kunci oportunistik tingkat 2 sangat mirip dengan kunci oportunistik filter. Dalam kebanyakan situasi, aplikasi Anda harus menggunakan kunci oportunistik tingkat 2. Hanya gunakan kunci filter jika Anda tidak ingin operasi terbuka untuk membaca untuk menyebabkan pelanggaran mode berbagi dalam rentang waktu antara aplikasi Anda membuka file dan menerima kunci. Untuk informasi selengkapnya, lihat Memfilter Kunci Oportunistik dan Respons Server untuk Membuka Permintaan pada File Terkunci.

Untuk informasi selengkapnya tentang melanggar kunci oportunistik, lihat Melanggar Kunci Oportunistik.

Kunci Oportunistik Batch

Kunci oportunistik batch memanipulasi pembukaan dan penutupan file. Misalnya, dalam eksekusi file batch, file batch dapat dibuka dan ditutup sekali untuk setiap baris file. Kunci oportunistik batch membuka file batch di server dan membuatnya tetap terbuka. Saat prosesor perintah "terbuka" dan "menutup" file batch, pengalih jaringan mencegat perintah terbuka dan tutup. Semua server yang diterima adalah perintah pencarian dan baca. Jika klien juga membaca di depan, server menerima permintaan baca tertentu paling banyak satu kali.

Saat membuka file yang sudah memiliki kunci oportunistik batch, server memeriksa status berbagi file setelah merusak kunci. Pemeriksaan ini memberi pemegang kunci kesempatan untuk menyelesaikan pembilasan cache dan menutup handel file. Operasi terbuka yang dicoba selama pemeriksaan berbagi tidak menyebabkan pemeriksaan berbagi gagal jika pemegang kunci melepaskan kunci.

Untuk contoh cara kerja kunci oportunistik batch, lihat Contoh Kunci Oportunistik Batch. Untuk informasi selengkapnya tentang melanggar kunci oportunistik, lihat Melanggar Kunci Oportunistik.

Filter Kunci Oportunistik

Kunci oportunistik filter mengunci file sehingga tidak dapat dibuka untuk akses tulis atau hapus. Semua klien harus dapat berbagi file. Kunci filter memungkinkan aplikasi untuk melakukan operasi pemfilteran nonintrusive pada data file (misalnya, kode sumber pembuka kompilator atau program katalog).

Kunci oportunistik filter berbeda dari kunci oportunistik tingkat 2 karena memungkinkan operasi terbuka untuk membaca terjadi tanpa pelanggaran mode berbagi dalam rentang waktu antara aplikasi Anda membuka file dan menerima kunci. Kunci oportunistik filter adalah kunci terbaik untuk digunakan ketika penting untuk memungkinkan klien lain membaca akses. Dalam kasus lain, aplikasi Anda harus menggunakan kunci oportunistik tingkat 2. Kunci oportunistik filter berbeda dari kunci oportunistik batch karena tidak memungkinkan beberapa bukaan dan penutupan ditangani oleh pengalih jaringan seperti yang dilakukan kunci oportunistik batch.

Aplikasi Anda harus meminta kunci oportunistik filter pada file dalam tiga langkah:

  1. Gunakan fungsi CreateFile untuk membuka handel ke file dengan parameter DesiredAccess diatur ke nol, menunjukkan tidak ada akses, dan parameter dwShareMode diatur ke bendera FILE_SHARE_READ untuk memungkinkan berbagi untuk dibaca. Handel yang diperoleh pada saat ini disebut handel penguncian.
  2. Minta kunci pada handel ini dengan kode kontrol FSCTL_REQUEST_FILTER_OPLOCK .
  3. Saat kunci diberikan, gunakan CreateFile untuk membuka file lagi dengan DesiredAccess diatur ke bendera GENERIC_READ . Atur dwShareMode ke bendera FILE_SHARE_READ untuk memungkinkan orang lain membaca file saat Anda membukanya, bendera FILE_SHARE_DELETE untuk memungkinkan orang lain menandai file untuk dihapus saat Anda membukanya, atau keduanya. Handel yang diperoleh pada saat ini disebut handel baca.

Gunakan handel baca untuk membaca dari atau menulis ke konten file.

Saat membuka file yang sudah memiliki kunci oportunistik filter, server memutuskan kunci lalu memeriksa status berbagi file. Pemeriksaan ini memberi klien yang memegang kunci oportunistik sebelumnya kesempatan untuk meninggalkan data yang di-cache dan mengakui jeda. Operasi terbuka yang dicoba selama pemeriksaan berbagi ini tidak menyebabkan pemeriksaan berbagi gagal jika mantan pemegang kunci melepaskan kunci. Sistem file menahan operasi terbuka hingga pemilik kunci menutup handel baca dan kemudian gagang penguncian. Setelah ini selesai, permintaan terbuka klien lain dapat dilanjutkan.

Untuk informasi selengkapnya tentang melanggar kunci oportunistik, lihat Melanggar Kunci Oportunistik.