如需方法說明,請參閱標頭註解。
掛鉤排序保證

驅動程式庫實作的掛鉤會由其他驅動程式和執行階段叫用。在某些情況下,這些呼叫可能會與其他 (甚至是相同) Hook 的呼叫平行發生。本節將說明您可能會依賴的排序屬性。
術語
本節會使用 C++ 執行模型中的「未排序」、「不確定排序」和「排序先於」等詞彙。
驅動程式初始化
該驅動程式庫的任何其他掛鉤之前,zx_driver_ops_t init 掛鉤都會完整執行。
驅動程式拆除
只有在發布這個驅動程式庫建立的所有裝置後,zx_driver_ops_t release 勾點才會開始執行。
驅動程式繫結
如果已啟用測試,只有在 run_unit_tests hook 之後,才會開始執行 zx_driver_ops_t bind hook。
裝置生命週期
當驅動程式成功叫用 device_add() 時,裝置生命週期就會開始。這可能發生在任何執行緒。裝置生命週期開始前或結束後,不會執行任何 zx_device_ops_t 勾點。
裝置的 release hook 開始執行時,裝置生命週期就會結束。
除非另有規定,否則 zx_device_ops_t 勾點彼此之間不會排序。
注意:這表示在呼叫 device_add() 後發生的任何程式碼 (即使在 bind 勾點中),都會與所建立裝置生命週期的結尾保持非循序關係。
裝置連線生命週期
裝置連線生命週期會在 zx_device_ops_t open hook 開始執行時啟動。如果有效裝置連線數為 0,系統就不會叫用任何 zx_device_ops_t read/write/message/close 勾點。
當 zx_device_ops_t close 掛鉤開始執行時,裝置連線生命週期就會結束。系統會先依序執行 read/write/message 勾點,再執行此勾點。
由於 read/write/message 勾點只會在驅動程式代管程序的主執行緒上執行,因此絕不會並行執行,但處理不同連線的待處理要求時,順序會不確定。
其他裝置 API
zx_device_ops_t get_size 和 get_protocol 勾點與所有勾點 (包括自身並行呼叫) 都不會依序執行。但有一個例外,就是這些 hook 會在 release hook 之前排序。