【发布时间】:2016-05-09 04:32:34
【问题描述】:
由于某种原因,调用 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,上面的代码在销毁过程中被调用。
希望你能给我指明正确的方向,非常感谢你的帮助!
【问题讨论】:
-
上面的sn-p代码是不是来自回调?您可以包含正在等待通知的代码吗?还有一点,你不需要
_exit是std::atomic,因为它受到_mutex的保护。 -
对
notify_one的调用可能会唤醒一个已调用_signal.wait()的线程,这可能是您的代码所在的位置。考虑在您的_signal.wait()之后添加断点以查看您的代码是否返回到该位置
标签: c++ multithreading visual-studio-2015 poco-libraries condition-variable