2017-12-08 13 views
0

私はSTDを試してみました:ここ http://www.cplusplus.com/reference/future/async/C++ std :: asyncがsystem_errorに遭遇しましたか?

のコード例非同期(async)しかし、私は不明なエラーとシステムエラーが発生した-1。誰でも私を助けることができますか?ありがとう!続き

は、ウェブサイトからコピーされた私のコードです:

// 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; 
} 

そして、次は私のコマンドラインです:

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) 

私のUbuntuのバージョン:

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

とg ++バージョン。

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. 
+0

それが答えを持っていませんが、これは[この質問](https://stackoverflow.com/questions/46634629/c-async-sometimes-resulting-in-stdsystem-errorのデュープです-and-sometimes-not) – bnaecker

+1

これはGCCのかなり古いバージョンなので、コンパイルコマンドの最後に '-pthread'フラグを追加する必要があります。 – bnaecker

+0

ありがとう! '-pthread'を追加すると本当に便利です! – desword

答えて

0

答えは、-pthreadコンパイルオプションの後に追加することです。

g++ isprime.cpp -std=c++11 -o isprime -pthread 
関連する問題