内核等待队列如何解决“丢失唤醒”?

时间:2015-06-16 11:33:34

标签: linux-kernel operating-system

我读了 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会丢失吗?

1 个答案:

答案 0 :(得分:1)

是的,唤醒将会丢失。

在检查条件之前,

prepare_to_wait()必须被称为。 (这是您将在实际代码中看到的内容。)