在LDD3書中,它介紹了簡單的睡眠(wait_event *()函數)和提前睡眠(prepare_to_wait()函數)。簡單睡眠(使用wait_event _ *()函數)和高級睡眠(使用prepare_to_wait()函數)有什麼區別?
如果我的理解是正確的,wait_queue_t似乎是一個過程條目,但wait_queue_head_t似乎是等待隊列中存儲的哪個(wait_queue_t)被添加的進程列表中..
所以,說到我的混淆了什麼情況下,我應該使用wait_event _ *()函數與prepare_to_wait並指定等待進程。
我可以說的唯一原因是我可以在睡覺前指定過程狀態而不是簡單的睡眠。但是,簡單的睡眠確實提供了可中斷和不可中斷的wait_event功能。所以,我有點困惑,爲什麼我們需要從設計和實現的角度來看兩者。謝謝。
嗨,CL。感謝您的迴應。然而,我看起來像我仍然可以使用wait_event將它放在my_own_wait實現...唯一的區別是,我可以把條件放在while循環中而不是在wait_event()中使用condition參數... – rickhau 2014-09-23 03:04:26
在現實世界中,事情往往比'my_own_wait'更復雜;這同樣適用於'wait_event'(它多次使用'condition')。但是,如果你的代碼*不能正確的使用'wait_event',那麼一定要用它。 – 2014-09-23 06:49:09
根據ldd3,除非將'schedule()'包裝在'if(!some_data_available())'中,否則會有一場競賽。 (在有些數據可用的情況下,有人試圖喚醒我們,在while檢查之後和prepare_to_wait()之前)http://www.makelinux.net/ldd3/chp-6-sect-2 – ted 2017-04-13 13:23:15