2017-12-01 13 views
-9

本当に助けが必要です。私は、C++で2つの別々のスレッドを使ってf(x)|| g(x)を計算する必要があります。プログラムは以下のように表示されますC++のスレッドを使用した並列コンピューティング

#include <iostream> 
#include <thread> 
using namespace std; 

int f(int x); 
int g(int x); 

int main() 
{ 
    cout << "Please enter an number" << endl; 
    int x; 
    cin >> x; 

    thread first(f, x); 

// Compute f(x)||g(x) using threads 
// do something like this first||second 

// Print result 
} 

int f(int x) 
{ 
    int result = x; 
    return result; 
} 

int g(int x) 
{ 
    int result = x; 
    return result; 
} 

この問題を解決することについてご意見がありましたら、本当にありがとうございます。 ありがとうございました!

+2

これまでに何を試みましたか? –

+0

[このもの](http://en.cppreference.com/w/cpp/thread)が役立つかもしれません。 – user0042

+2

はじめに:関数の戻り値をどのように返すかを見つける。 ['std :: promise()'](http://en.cppreference.com/w/cpp/thread/promise)と['std :: future'](http://en.cppreference.com/w/cpp/thread/future)はこれを比較的簡単に行う良い方法です。 – user0042

答えて

0

この種の問題は、使用方法に応じて、スレッドを使用するかどうかを指定できるstd::asyncおよびstd::futureを使用すると最もよく解決されます。

int main() { 
    std::cout << "Please enter an number" << std::endl; 
    int x; 
    std::cin >> x; 
    auto f_future = std::async(std::launch::async, f, x); 
    auto g_future = std::async(std::launch::async, g, x); 

    //will block until f's thread concludes, or until both threads conclude, depending on how f resolves 
    auto result = f_future.get() || g_future.get(); 
    std::cout << /*...*/ << std::endl; 
} 
+1

"両方のスレッドまでブロックされます..."本当ですか? 'f'が' g'が終了する前に 'true'を返すかどうかも? – user463035818

+0

@ tobi303 'f'が' true'を返すと短絡します。私は投稿を更新しました。 – Xirema

+0

私は本当に何が起こったのか分からず、決して(未だに)未来を自分で使っていませんでした。そして、私はdownvoteが何のためにあるか分からない – user463035818

関連する問題