gpt4 book ai didi

c++ - VC++ 和 GCC 下 boost::condition_variable 的不同行为

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:27 27 4
gpt4 key购买 nike

在我的计算机上,在 Windows 7 上运行,以下代码在带有 Boost 1.53 的 Visual C++ 2010 中编译,输出

no timeout
elapsed time (ms): 1000

使用 GCC 4.8 编译的相同代码 (online link ) 输出

timeout
elapsed time (ms): 1000

我的意见是VC++输出不正确,应该是timeout。有没有人在 VC++ 中有相同的输出(即 no timeout)?如果是,那么它是否是 boost::condition_variable 的 Win32 实现中的错误?

代码是

#include <boost/thread.hpp>
#include <iostream>

int main(void) {
boost::condition_variable cv;
boost::mutex mx;
boost::unique_lock<decltype(mx)> lck(mx);
boost::chrono::system_clock::time_point start = boost::chrono::system_clock::now();
const auto cv_res = cv.wait_for(lck, boost::chrono::milliseconds(1000));
boost::chrono::system_clock::time_point end = boost::chrono::system_clock::now();
const auto count = (boost::chrono::duration_cast<boost::chrono::milliseconds>(end - start)).count();
const std::string str = (cv_res == boost::cv_status::no_timeout) ? "no timeout" : "timeout";
std::cout << str << std::endl;
std::cout << "elapsed time (ms): " << count << std::endl;
return 0;
}

最佳答案

如果我们阅读我们看到的文档:

Atomically call lock.unlock() and blocks the current thread. The thread will unblock when notified by a call to this->notify_one() or this->notify_all(), after the period of time indicated by the rel_time argument has elapsed, or spuriously... [Emphasis mine]

您几乎可以肯定看到的是 VS 实现将其视为恰好在预期持续时间结束时的虚假唤醒,而另一个实现将其视为超时。

关于c++ - VC++ 和 GCC 下 boost::condition_variable 的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16044092/

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