use*_*967 2 c++ multithreading condition-variable poco-libraries visual-studio-2015
由于某种原因,调用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();
Run Code Online (Sandbox Code Playgroud)
我正在使用Microsoft Visual C++ 2015,并且在销毁期间调用上面的代码.
我希望你能指出我正确的方向,非常感谢你的帮助!
哦,我终于找到了问题.为了给出一些背景知识,我目前正在使用一些Poco库(参见http://pocoproject.org/),我实现了自己的Poco :: Channel.经过一番挖掘后,我意识到Poco将所有通道保存在静态 LoggingRegistry中,只有在所有剩余线程都被杀死后才会释放.
我最好的猜测是,如果正在等待该std :: condition_variable的线程被杀死,则std :: condition_variable变为无效.
无论如何,为了防止这个问题,必须在main(int argc, char** argv)返回之前调用以下内容:
Poco::Logger::shutdown();
Poco::LoggingRegistry::defaultRegistry().clear();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
797 次 |
| 最近记录: |