如何解决在 std::promise::set_value 崩溃中崩溃
错误: 抛出“std::future_error”实例后调用终止 what(): std::future_error: 无关联状态
g++ --version 7.5.0 但是,相同的代码行在具有相同 g++ 版本的 QNX 上运行良好。
此外,如果我们生成一个新线程并将 promise 作为参数移动到该线程函数,那么在对 promise 对象调用 set_value() 时异常不是自己的。
我的确切问题是,如果这是预期的行为, 有没有办法转移 promise 对象的所有权,以便其他线程可以在稍后执行期间使用它。 除了生成一个新线程之外,还可以从一个已经存在的线程访问 promise。
#include <future>
using namespace std;
int main()
{
promise<int> p1;
promise<int> p2(move(p1));
p1.set_value(99); // SIGSEGV!
}
解决方法
获得异常是这里的标准行为。当您移动承诺时,它将承诺持有的共享状态移动到移动对象。这使得移动的对象没有共享状态。如果我们查看 reference page of set_value()
,我们会看到它状态
例外
std::future_error
在以下条件下:
-
*this
没有共享状态。错误类别设置为no_state
。
如果您的 QNX 实现没有抛出异常,那么它就是不符合标准的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。