我在我的代码std::promise
和std::shared_future
(这是std::future
的多个等待线程版本)中用于异步执行,我发现了一个永远不会回来的情况(死锁)当用100毫秒(或任何其他持续时间)调用此函数时。
这是一段代码(来自我的类),假设有人设置与此std::promise
相关的std::shared_future
的值,阻止该线程:
bool wait_until_ready(unsigned int msec)
{
if (_ready)
return true;
std::chrono::milliseconds span(msec);
std::future_status fstat;
fstat = _shared_fut.wait_for(span);
if (fstat == std::future_status::ready)
{
_shared_fut.get();
return true;
}
return false;
}
void init()
{
unique_lock<mutex> lck(_mutex);
_promise = promise<bool>();
_shared_fut = _promise.get_future().share();
_ready = false;
}
void set_ready()
{
unique_lock<mutex> lck(_mutex);
if (!_ready)
{
_ready = true;
_promise.set_value(true);
}
}
对wait_for()
的调用始终导致死锁(没有异常被抛出)。
有没有人在std::future
之前遇到过这种行为?