C++ promise.set_value 在 linux 下因未知错误而失败
C++ promise.set_value fails with unknown error under linux
我正在尝试在我们的高性能服务器上进行模拟 运行。它(不幸的是)使用 CentOS Linux release 7.7.1908 (Core) 而不是我正在开发程序的 Win10。随之而来的是大量错误,其中一个我无法在我的 on:
上修复
#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
我正在尝试在我们的高性能服务器上进行模拟 运行。它(不幸的是)使用 CentOS Linux release 7.7.1908 (Core) 而不是我正在开发程序的 Win10。随之而来的是大量错误,其中一个我无法在我的 on:
上修复#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