首页 文章

条件变量中的wait_for函数的用途 - C 11

提问于
浏览
0

我是条件变量,多线程和互斥的新手,我有一个基本的问题 .

在wait_for上从en.cppreference.com引用 - “阻止当前线程,直到条件变量被唤醒或在指定的超时持续时间之后” .

为什么在指定的持续时间后当前线程被解除阻塞 . 条件变量的基本目的是在发生“条件”时通知 . 如果线程被唤醒,例如每500毫秒,它不会导致开销吗?如果通知调用未发生/失败等,也会将虚假唤醒内置为安全机制 .

我显然遗漏了一些基本的东西,但不确定它是什么 . 任何帮助表示赞赏 .

2 回答

  • 1

    这种情况的用例是,如果您想等待事件发生,但不是无限期 .

    也许在超时到期后,您希望通知用户获取结果的时间比预期的要长 . 也许你想触发取消提供结果的任务 .

    正如您正确指出的那样,这会导致额外的开销,因此如果您确实有合理的事情要对过期的超时作出反应,那么使用它而不是 wait 才有意义 .

    虚假的唤醒并不是一种安全机制,而是某些硬件架构所带来的不幸的必然性 . 在一个完美的世界中(即,你只用谓词调用 wait 函数的世界),不会发生任何虚假的唤醒 .

  • 3

    如果线程被唤醒,比方说,每隔500毫秒?

    这不是 wait_for 的工作方式 . 让我们暂时忽略虚假的唤醒 . 该功能将在收到通知或计时器到期时唤醒 . 查看它的另一种方法:等待通知,但不超过 rel_time 时间 .

    例如,当通知机制可能崩溃时,它可用于避免无限等待 . 或者,如果通知不能很快到达,则需要采取措施 .

    虚假唤醒是现代软件/硬件架构现实中不必要的副作用 . This answer解释得很好 .

相关问题