使用C ++ 2011线程运行时错误

时间:2015-03-10 15:37:45

标签: multithreading c++11

我使用C ++ 11的线程库有以下简单程序。它编译但不运行。

#include <iostream>
#include <future>
using namespace std;
double square(int i) {
 return i * i;
}

int main() {
 future<double> fd = async(square, 2);
 double d = fd.get();
 cout << d << endl;
 return 0;
}

运行程序

terminate called after throwing an instance of 'std::system_error'
  what():  Unknown error -1
Aborted (core dumped)

我使用gcc版本4.8.2(Ubuntu 4.8.2-19ubuntu1)并使用&#34; g ++ -o main3 -std = c ++ 11 -Wall -g main3.cpp -lpthread&#34;进行编译。有谁知道那里发生了什么?

1 个答案:

答案 0 :(得分:1)

尝试按如下方式编译程序:

g++ -o main3 -std=c++11 -pthreads -Wall -g main3.cpp

这将添加对多线程的支持,并将为预处理器和链接器设置标志。选项-lpthread仅在链接时添加Pthread库,可能不够。

g++ 4.8.2的手册页说明如下:

  

<强> -pthreads

     

使用POSIX线程库添加对多线程的支持。      此选项为预处理器和链接器设置标志。这个      选项不会影响生成的目标代码的线程安全性             由编译器或随其提供的库的编译器。