2013-01-07 40 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