2013-01-07 59 views
-2

我有這樣的C++代碼的VS 2008:C++:線程變量聲明和做作

int x function(int a, int b){ 
    int var1; 
    int var2; 
    var1*=a; 
    var2*=b; 
    return a+b; 
} 

我怎麼可以這樣做:

int x function(int a, int b){ 
    thread1 { 
     int var1; 
     var1*=a; 
    } 

    thread2{ 
     int var2; 
     var2*=b; 
    } 

    thread1.join(); 
    thread2.join(); 
    return a+b; 
} 

而不產生其他2層的功能呢?

+6

目前尚不清楚你想要做什麼。你不會初始化'var1'或'var2'到任何特定的東西,然後你將它們相乘,然後你丟掉它們的值。它沒有任何意義。無論如何,調度工作到一個線程的成本(或者更糟糕的是,加入一個線程)的成本遠高於單個乘法的成本,那麼使用線程的要點是什麼? –

+3

'int x function(int a,int b)'是什麼意思? – Nawaz

+0

知道[std :: thread在這裏工作](http://en.cppreference.com/w/cpp/thread/thread/thread)如果這就是你想要的。 – Nawaz

回答

1

也許std::future是你在追求什麼?但我不知道它適用於VS2008雖然,它適用於VS2012 BTW:未來的

int Function(int a, int b) 
{ 
    std::future<int> a1 = std::async([a](){ return a*2; }); 
    std::future<int> b1 = std::async([b](){ return b*3; }); 

    return a1.get() + b1.get(); 
} 

結賬參考:this

+0

我嘗試在我的電腦的每個核心上初始化我的變量,我會試試這個。 – Aphelion