看板 LinuxDev 關於我們 聯絡資訊
#define __wait_event_interruptible (wq, condition, ret) \ do { \ DEFINE_WAIT (__wait); \ for (;;) { \ prepare_to_wait (&wq, &__wait, TASK_INTERRUPTIBLE); \ if (condition) \ break; \ if (!signal_pending(current)) { \ schedule (); \ continue; \ } \ ret = -ERESTARTSYS; \ break; \ } \ finish_wait(&wq, &__wait); \ } while (0) ----------------------------------------------------------------- 以上是wait_event_interruptible的原型, 這看起來是個無限迴圈,如果是處於單CPU 上的環境,而linux kernel是不可被搶先 (non-preemptive)的,所以迴圈會一直執行下去? 什麼時候cpu的控制權才會交出去? -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.204.108.65
yuskeb:問一下 呼叫schedule()時就有機會把控制權交出去了 是嗎? 04/30 00:55
littlejohn:沒錯 05/01 08:33
eleghost:不是在prepare_to_wait()就blocking了嗎,cpu就出去了吧 06/10 23:06