我下面的Linux Device Drivers 3rd Edition書中的例子:目的在Linux內核中wake_up_sync/wake_up_interruptible_sync的
if (temp = = 0)
wake_up_interruptible_sync(&scull_w_wait); /* awake other uid's */
return 0;
筆者指出:
這裏是哪裏調用wake_up_interruptible_sync有意義的例子。當我們做 喚醒時,我們正要返回到用戶空間,這是系統自然調度點 。在我們進行喚醒時,我們可能不會重新安排時間,而只需調用「同步」版本並完成我們的工作,就可以達到 。
我不明白爲什麼在這種情況下使用wake_up_interruptible_sync
更好。作者暗示,這個調用將阻止重新調度 - 它在調用中阻止 - 但是在wake_up_interruptible_sync
返回後,在return 0
行之前,其他線程是否無法控制CPU?
那麼,如果一個線程在每次調用之後都可以控制CPU,那麼調用wake_up_interruptible_sync
與典型的wake_up_interruptible
有什麼區別?
因此''reschedule'在'wake_up'函數中被調用,並且它在函數返回後也被調用? – 2013-04-25 13:08:53
沒有任何函數返回後,返回到用戶空間時。 – 2013-04-25 14:03:05
我明白了,所以我們不想在'wake_up'函數中調用'reschedule',因爲它在返回用戶空間時會被調用。通過在'wake_up_sync'中延遲它,我們有機會在睡覺前完成線程,從而釋放該線程所擁有的資源;即使線程仍然可以結束睡眠,但我們增加了延遲「重新計劃」調用的機會。我現在的推理是否正確? – 2013-04-25 14:18:13