Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Dari perspektif pengemudi, IRP dapat dibatalkan kapan saja. Pembatalan IRP terjadi secara asinkron; oleh karena itu, pembalap harus dapat menangani sejumlah kondisi balapan potensial, yang dibuat jika IRP dibatalkan pada salah satu poin berikut:
Setelah rutinitas driver dipanggil, tetapi sebelum mengantre IRP.
Setelah rutinitas driver dipanggil, tetapi sebelum mencoba memproses IRP. Misalnya, IRP mungkin dibatalkan setelah rutinitas driver StartIo dipanggil, tetapi sebelum rutinitas StartIo menghapus IRP dari antrean perangkat.
Setelah driver rutin menghapus antrean IRP, tetapi sebelum memulai I/O yang diminta.
Perhatikan bahwa setelah driver mengantrekan IRP dan melepaskan kunci putaran apa pun yang melindungi antrean, utas lain dapat mengakses dan mengubah IRP. Ketika utas asli dilanjutkan—bahkan langsung setelah baris kode berikutnya—IRP mungkin sudah dibatalkan atau diubah.
Driver dapat menggunakan kerangka kerja antrean yang aman dari pembatalan IRP untuk menerapkan antrean IRP. Sistem kemudian mendaftarkan Batalkan prosedur untuk driver yang menangani sinkronisasi secara otomatis untuk membatalkan IRP dengan aman. Lihat Cancel-Safe Antrean IRP untuk informasi selengkapnya. Jika tidak, driver harus menerapkan sinkronisasi mereka sendiri.
Anggota IRP berikut berisi informasi tentang pembatalan:
Irp->Batal menunjukkan apakah IRP dibatalkan atau harus dibatalkan.
Irp->CancelRoutine menunjukkan apakah IRP dapat dibatalkan. Jika anggota ini berisi penunjuk ke rutinitas pembatalan, maka IRP dapat dibatalkan. Jika anggota ini NULL, maka IRP tidak dapat dibatalkan. Jika anggota ini NULL, tetapi Irp->Batalkan diatur, ini menunjukkan bahwa rutinitas pembatalan sedang beroperasi dan IRP sedang dalam proses dibatalkan.
Jika driver menangani IRP yang dapat dibatalkan, driver bertanggung jawab untuk mengatur rutinitas Batalkan yang sesuai di setiap IRP yang disimpannya dalam keadaan dapat dibatalkan.
Bagian ini mencakup topik berikut tentang menyinkronkan pembatalan IRP.
Menggunakan Kunci Putar Batal Sistem
Menyinkronkan Pembatalan dalam Rutinitas Driver yang Memproses IRP
Menyinkronkan Pembatalan di Driver Higher-Level tanpa Membatalkan Rutinitas