2014-10-03 64 views
0

我從另一個運行並行的一個類方法有問題。這裏是我的代碼:線程中的不同類的運行方法

class A 
{ 
private: 
    std::vector<int> m_vec; 
    int id; 
public: 
    A(){}; 
    A(int _id):id(_id){}; 
    ~A(){}; 

    void print() 
    { 
     std::cout << "id=" << id << " size=" << m_vec.size() << std::endl; 
    } 

    void load_vec() 
    { 
     for (int i = 0; i < 100000000; i++) 
     { 
      m_vec.push_back(i); 
     } 
    } 

}; 


class B 
{ 
private: 
    std::vector<A> m_a; 
public: 
    B() 
    { 
     m_a.push_back(A(0)); 
     m_a.push_back(A(1)); 
    } 
    ~B(){}; 

    void func(int id) 
    { 
     m_a.at(id).load_vec(); 
    } 

    void run() 
    { 

     std::thread t_0(&B::func, this, 0); 
     std::thread t_1(&B::func, this, 1); 
     t_0.join(); 
     t_1.join(); 
    } 

    void print() 
    { 
     for (std::vector<A>::iterator itr = m_a.begin(); itr != m_a.end(); itr++) 
     { 
      itr->print(); 
     } 
    } 

}; 


int main(int argc, const char * argv[]) 
{ 


    A a_0(0), a_1(1); 

    clock_t time = clock(); 
    a_0.load_vec(); 
    a_1.load_vec(); 

    time = clock() - time; 

    std::cout << "finish in: " << ((float)time)/CLOCKS_PER_SEC<< std::endl; 

    B b; 

    time = clock(); 

    b.run(); 
    std::cout << "finish in: " << ((float)time)/CLOCKS_PER_SEC<< std::endl; 

    b.print(); 

    return 0; 
} 

,這是結果:

finish in: 8.20428 
finish in: 8.21259 
id=0 size=100000000 
id=1 size=100000000 

我的問題是,那個時候由2個線程完成的任務是做大,然後在1個線程運行方法的2倍。任何人都可以幫助我嗎?謝謝

回答

0

clock函數返回CPU時間,而不是實時。一個或兩個線程可以使用類似數量的CPU時間,但兩個線程應該使用實時時間的一半。

相關問題