gpt4 book ai didi

C++ promise.set_value 在 linux 下失败并出现未知错误

转载 作者:行者123 更新时间:2023-11-28 04:07:20 25 4
gpt4 key购买 nike

我正在尝试让我的模拟在我们的高性能服务器上运行。它(不幸的是)使用 CentOS Linux 版本 7.7.1908(核心)而不是我正在开发程序的 Win10。随之而来的是大量错误,其中一个我无法修复:

#include <future>
#include <iostream>

int main(int argument_count, char** arguments) {
int i = 1234;
std::cout << "Initialized i" << std::endl;

std::promise<int> promise;
std::cout << "Constructed promise" << std::endl;

promise.set_value(std::move(i));
std::cout << "Set value" << std::endl;

std::future<int> future = std::move(promise.get_future());
std::cout << "Retrieved future" << std::endl;

int j = std::move(future.get());
std::cout << "Got value: " << j << std::endl;

return 0;
}

在 Win10 下使用“cl test.cpp”编译时,输出看起来像我期望的那样:

Desktop>test.exe

Initialized i

Constructed promise

Set value

Retrieved future

Got value: 1234

另一方面,当用“g++ -std=c++11 test.cpp”在服务器上编译时,输出是不同的:

~/test_dir$ ./a.out

Initialized i

Constructed promise

terminate called after throwing an instance of 'std::system_error'

what(): Unknown error -1

Aborted

在 Ubuntu 16.04.6 LTS 机器上尝试此操作时,我确实遇到了同样的错误。我不明白为什么会这样。显然,此行中有些可疑:promise.set_value(std::move(i)) 因为之前的输出已打印,并且该语句之后的行不再执行。此外,编译器/链接器确实找到了两个版本之一“void set_value (const T& val);”或“void set_value (T&& val);”这适用于模板规范“int”,我强烈怀疑后者。

但是,为什么在将整数设置为 promise 的值时程序会中止?即使同时内联值和跳过变量也会产生错误。

谁能告诉我错误在哪里?

最佳答案

尝试使用 pthread 标志进行编译:

g++ -std=c++11 test.cpp -pthread

关于C++ promise.set_value 在 linux 下失败并出现未知错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58489617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com