Menyinkronkan Pembatalan IRP

Dari perspektif pengemudi, IRP dapat dibatalkan kapan saja. Pembatalan IRP terjadi secara asinkron; oleh karena itu, pembalap harus dapat menangani sejumlah kondisi balapan potensial, 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 StartIo driver dipanggil, tetapi sebelum rutin StartIo menghapus IRP dari antrean perangkat.

  • Setelah driver rutin menghapus antrean IRP, tetapi sebelum memulai I/O yang diminta.

Perhatikan bahwa setelah driver mengantre IRP dan melepaskan kunci putaran apa pun yang melindungi antrean, utas lain dapat mengakses dan mengubah IRP. Saat utas asli dilanjutkan—bahkan segera setelah baris kode berikutnya—IRP mungkin telah dibatalkan atau diubah.

Driver dapat menggunakan kerangka kerja antrean IRP yang aman untuk menerapkan antrean IRP. Sistem kemudian mendaftarkan rutinitas Batal untuk driver yang secara otomatis menangani sinkronisasi untuk membatalkan runtime integrasi dengan aman. Lihat Antrean IRP Batal-Aman 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-Cancel> diatur, yang menunjukkan bahwa rutinitas pembatalan sedang berjalan dan IRP sedang dalam proses dibatalkan.

Jika driver menangani IRP yang dapat dibatalkan, driver bertanggung jawab untuk mengatur rutinitas Batal yang sesuai di setiap IRP yang disimpan dalam status yang dapat dibatalkan.

Bagian ini mencakup topik berikut tentang menyinkronkan pembatalan IRP.

Menggunakan Kunci Putar Batal Sistem

Menyinkronkan Pembatalan dalam Rutinitas Driver yang Memproses RUNPS

Menyinkronkan Pembatalan di Driver Higher-Level tanpa Membatalkan Rutinitas

Menggunakan Driver-Supplied Spin Lock