2017-12-01 1 views
-9

정말 도움이 필요합니다. C++에서 두 개의 개별 스레드를 사용하여 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::asyncstd::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

좋아, 나는 정말 어떻게되는지, 결코 (성공적으로) 미래를 직접 사용하지는 않았다. 그리고 btw 나는 downvote가 무엇인지에 관해 모른다. – user463035818