Bagikan melalui


Struktur dan rutinitas ERESOURCE

Artikel ini menjelaskan struktur ERESOURCE dan rutinitas yang disediakan sistem yang beroperasi di atasnya. Anda dapat menggunakan struktur ERESOURCE untuk menerapkan penguncian baca/tulis di driver Anda.

Struktur ERESOURCE

Struktur ERESOURCE digunakan untuk mengelola akses ke sumber daya bersama. Ini menyediakan mekanisme untuk menyinkronkan akses ke sumber daya yang bisa digunakan bersama di antara beberapa thread.

Struktur ERESOURCE tidak transparan; yang berarti, komponen-komponennya dicadangkan untuk penggunaan sistem.

Penyimpanan untuk ERESOURCE harus dialokasikan dari kumpulan non-halaman.

Rutinitas ERESOURCE

Sistem ini menyediakan rutinitas untuk memperoleh dan merilis struktur ERESOURCE, dan untuk memeriksa statusnya saat ini.

Memperoleh dan merilis struktur ERESOURCE

Driver dapat menggunakan struktur ERESOURCE untuk menerapkan sinkronisasi eksklusif/bersama. Sinkronisasi eksklusif/bersama berfungsi sebagai berikut:

  • Sejumlah utas dapat memperoleh ERESOURCE seperti yang dibagikan.

  • Hanya satu utas yang dapat memperoleh ERESOURCE secara eksklusif. ERESOURCE hanya dapat diperoleh secara eksklusif jika tidak ada utas yang sudah memperolehnya sebagai bersama.

Utas yang saat ini tidak dapat memperoleh ERESOURCE dapat, secara opsional, ditempatkan dalam status tunggu hingga ERESOURCE dapat diperoleh. Sistem ini mempertahankan dua daftar utas yang menunggu ERESOURCE: daftar penanti eksklusif dan daftar penanti bersama.

Penggunaan umum untuk sinkronisasi eksklusif/bersama adalah menerapkan kunci baca/tulis. Kunci baca/tulis memungkinkan beberapa utas untuk melakukan operasi baca, tetapi hanya satu utas yang dapat menulis pada satu waktu. Skenario ini dapat diimplementasikan langsung dalam hal memperoleh ERESOURCE.

Driver mengalokasikan penyimpanan untuk ERESOURCE dan menginisialisasinya dengan ExInitializeResourceLite. Sistem ini mempertahankan daftar semua struktur ERESOURCE yang digunakan. Ketika driver tidak lagi memerlukan ERESOURCE tertentu, driver harus memanggil ExDeleteResourceLite untuk menghapusnya dari daftar sistem. Driver juga dapat menggunakan kembali ERESOURCE dengan memanggil ExReinitializeResourceLite.

Driver dapat melakukan operasi dasar berikut pada ERESOURCE:

Parameter WaitExAcquireResourceSharedLite dan ExAcquireResourceExclusiveLite menentukan apakah utas saat ini akan menunggu untuk memperoleh ERESOURCE. Jika Anda menentukan nilai FALSE dan ERESOURCE tidak dapat diperoleh, maka rutinitas mengembalikan FALSE. Jika Anda menentukan nilai TRUE, maka utas saat ini akan dimasukkan ke dalam daftar tunggu yang sesuai untuk ERESOURCE.

Memeriksa kondisi struktur ERESOURCE

Driver juga dapat menentukan status ERESOURCE saat ini, sebagai berikut: