gpt4 book ai didi

c++ - 为什么 std::condition_variable::notify_one 阻塞?

转载 作者:搜寻专家 更新时间:2023-10-31 00:10:41 26 4
gpt4 key购买 nike

出于某种原因,调用 signal.notify_one() 会阻塞当前线程并且不会返回。我从未听说过这种行为,也不知道如何解决。

{
std::lock_guard<std::mutex> lock(_mutex);
_exit = true; // _exit is a std::atomic<bool>
}

std::cout << "before" << std::endl;
_signal.notify_one();
std::cout << "after" << std::endl;

_thread.join();

我使用的是 Microsoft Visual C++ 2015,上面的代码在销毁过程中被调用。

希望您能给我指明正确的方向,非常感谢您的帮助!

最佳答案

好吧,我终于找到问题所在了。为了提供一些背景知识,我目前正在使用一些 Poco 库(请参阅 http://pocoproject.org/ )并且我实现了自己的 Poco::Channel。经过一些挖掘后,我意识到 Poco 将所有 channel 保存在一个static LoggingRegistry 中,只有在所有剩余线程都被杀死后才会被释放。

我最好的猜测是,如果正在等待 std::condition_variable 的线程被杀死,std::condition_variable 将变得无效。

无论如何,为了防止这个问题,必须在 main(int argc, char** argv) 返回之前调用以下代码:

Poco::Logger::shutdown();
Poco::LoggingRegistry::defaultRegistry().clear();

关于c++ - 为什么 std::condition_variable::notify_one 阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37107778/

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