【问题标题】:How do kernel wait queues solve "lost wake up"?内核等待队列如何解决“丢失唤醒”?
【发布时间】:2015-06-16 11:33:34
【问题描述】:

我阅读了Linux Kernel Development一书,在睡眠和唤醒部分给出的示例有些问题。

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() 之前和while 条件之后会发生什么? wake_up 会丢失吗?

【问题讨论】:

    标签: linux-kernel operating-system


    【解决方案1】:

    是的,唤醒将丢失。

    prepare_to_wait() 必须在检查条件之前调用。 (这是您将在实际代码中看到的内容。)

    【讨论】:

    • 所以这意味着这本书有误?
    • 这意味着你发现了一个的错误。 (我找不到第 3 版的勘误表。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    • 2020-08-31
    • 1970-01-01
    相关资源
    最近更新 更多