【发布时间】:2018-01-22 12:20:15
【问题描述】:
我有这个代码:
#include <future>
#include <thread>
int main()
{
std::promise<void> p;
p.set_value();
p.get_future().get();
return 0;
}
在使用gcc 编译后,它会抛出std::system_error:
$ g++ -o foo foo.cpp -std=c++11 -lpthread
$ ./foo
terminate called after throwing an instance of 'std::system_error'
what(): Unknown error -1
奇怪的是,在创建承诺之前添加零秒睡眠可以防止异常:
int main()
{
std::this_thread::sleep_for(std::chrono::milliseconds(0));
std::promise<void> p;
p.set_value();
p.get_future().get();
return 0;
}
$ g++ -o foo foo.cpp -std=c++11 -lpthread
$ ./foo
$
我尝试了gcc 4.8.5 和 5.4.0,结果相同。为什么会这样?
【问题讨论】:
-
您是否有任何理由认为需要省略可以重现此内容的 GCC 版本?重要信息的种类...
-
使用
-lpthread构建是错误的。您应该使用-pthread。 -
@ks1322 谢谢,看来是关于
lpthreadvspthread