gpt4 book ai didi

c++ - 使用 Stroustrup 示例的 condition_vairable::wait_for() 问题

转载 作者:行者123 更新时间:2023-12-01 14:47:05 25 4
gpt4 key购买 nike

以下示例代码来自 Stroustrup C++ 第 4 版第 1234 页。我怀疑这是否是 his errata document 中未列出的勘误表。 .由于超时,代码抛出系统错误,从我读到的 wait_for 开始在 the specs page可以虚假返回。因此,not_empty == false它可能不是持续时间超时的结果。
任何人都可以确认这将是行为,或者此代码是否反射(reflect)了 wait_for表现?

template<typename T>
void Sync_queue::get(T& val, steady_clock::duration d)
{
unique_lock<mutex> lck(mtx);
bool not_empty = cond.wait_for(lck,d,[this] { return !q.empty(); });
if (not_empty) {
val=q.front();
q.pop_front();
}
else
throw system_error{"Sync_queue: get() timeout"};
}

最佳答案

你指的是这部分:

1)  ... It may also be unblocked spuriously.
关键的细节是这只是描述 wait_for第一 重载,这就是“1)”的意思, 不是 使用谓词。
第二个重载是具有谓词参数的重载。下面描述了第二个重载,它遵循 wait_until ;如果您继续,它会明确定义此重载:超时到期或谓词得到满足。这样做是为了以预期的方式正确处理虚假唤醒。

关于c++ - 使用 Stroustrup 示例的 condition_vairable::wait_for() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63333536/

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