0

I have tried the std:async example code in here http://www.cplusplus.com/reference/future/async/

However, I encounter system errors with unknown error -1. Anyone can help me ? Thanks!

Following is my code that is copied from the website:

// async example
#include <iostream>       // std::cout
#include <future>         // std::async, std::future

// a non-optimized way of checking for prime numbers:
bool is_prime (int x) {
  std::cout << "Calculating. Please, wait...\n";
  for (int i=2; i<x; ++i) if (x%i==0) return false;
  return true;
}

int main ()
{
  // call is_prime(313222313) asynchronously:
  std::future<bool> fut = std::async (is_prime,313222313);

  std::cout << "Checking whether 313222313 is prime.\n";
  // ...

  bool ret = fut.get();      // waits for is_prime to return

  if (ret) std::cout << "It is prime!\n";
  else std::cout << "It is not prime.\n";

  return 0;
}

And the following is my commandline:

ubuntu:~/cpp_dynamic_invoke_success/stdasync_test$ g++ isprime.cpp -std=c++11 -o isprime
ubuntu:~/cpp_dynamic_invoke_success/stdasync_test$ ./isprime 
Checking whether 313222313 is prime.
terminate called after throwing an instance of 'std::system_error'
  what():  Unknown error -1
Aborted (core dumped)

My ubuntu version:

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.3 LTS
Release:    14.04
Codename:   trusty

And g++ version.

g++ (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Jive Dadson
  • 16,680
  • 9
  • 52
  • 65
desword
  • 37
  • 6
  • Though it doesn't have an answer, this is a dupe of [this question](https://stackoverflow.com/questions/46634629/c-async-sometimes-resulting-in-stdsystem-error-and-sometimes-not) – bnaecker Dec 08 '17 at 04:40
  • 1
    This is a pretty old version of GCC, so you may need to add the `-pthread` flag at the end of your compilation command. – bnaecker Dec 08 '17 at 04:41
  • Thanks! add `-pthread` is really helpful! – desword Dec 08 '17 at 04:50

1 Answers1

0

The answer is to add -pthread aftet the compilation option.

g++ isprime.cpp -std=c++11 -o isprime -pthread
desword
  • 37
  • 6