[英]Crash in std::promise::set_value crash
错误:在抛出 'std::future_error' what() 的实例后调用终止:std::future_error:没有关联的 state
g++ --version 7.5.0 但是,相同的代码行在具有相同 g++ 版本的 QNX 上运行良好。
Also, if we spawn a new thread and move promise to that thread function as a parameter, then exception is not theown when set_value() is invoked on promise object.
我的确切问题是,如果这是预期的行为,有没有办法转移 promise object 的所有权,以便其他线程可以在稍后执行期间使用它。 除了产生一个新线程,而是能够从一个已经存在的线程访问 promise。
#include <future>
using namespace std;
int main()
{
promise<int> p1;
promise<int> p2(move(p1));
p1.set_value(99); // SIGSEGV!
}
获得异常是这里的标准行为。 当您移动 promise 时,它会将共享的 state 移动到 promise 持有的移动到 ZA8CFDE6331BD59EB62AC96F89111 这使得从 object 移出没有共享的 state。 如果我们查看set_value()
的参考页面,我们会看到它声明
例外
std::future_error
在以下情况下:
*this
没有共享的 state。 错误类别设置为no_state
。
如果您的 QNX 实现没有抛出异常,那么它就是不合格的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.