我读了 Linux内核开发这本书,并且在睡眠和唤醒部分给出的示例存在一些问题。
DEFINE_WAIT(wait);
add_wait_queue(q, &wait);
while (!condition) {
prepare_to_wait(&q, &wait, TASK_INTERRUPTIBLE);
if (signal_pending(current))
/* handle signal */
schedule();
}
finish_wait(&q, &wait);
如果wake_up出现在prepare_to_wait()
之前和之后的状态,会发生什么? wake_up
会丢失吗?
答案 0 :(得分:1)
是的,唤醒将会丢失。
在检查条件之前, prepare_to_wait()
必须被称为。
(这是您将在实际代码中看到的内容。)