gpt4 book ai didi

rust - 您应该如何处理派克的虚假唤醒?

转载 作者:行者123 更新时间:2023-12-03 11:26:59 25 4
gpt4 key购买 nike

根据crossbeam::Parker documentation:

The park method blocks the current thread unless or until the token is available, at which point it automatically consumes the token. It may also return spuriously, without consuming the token.


您应该如何检测到发生虚假唤醒?在内部,似乎Parker使用原子来跟踪 token 是否已被使用,但是除了 parkpark_timeout方法之外,似乎没有一种查询其状态的方法。

最佳答案

您应该以其他方式处理它。例如,如果您正在手动实现mpsc channel ,则recv函数可能看起来像这样:

loop {
if let Some(message) = self.try_recv() {
return message;
}
park();
}
在这种情况下,如果发生虚假唤醒,则循环将尝试获取它再次等待的事物,但是由于这是虚假唤醒,因此该事物不可用,并且循环只会再次进入休眠状态。一旦 send实际发生,发送方将取消接收方的存储,此时 try_recv将成功。
此类 channel 实现的示例是 here( source),尽管它使用 CondVar而不是驻留线程,但这是相同的想法。

关于rust - 您应该如何处理派克的虚假唤醒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63543946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com