2014-10-03 2 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 번 실행 크다. 누구든지 제발 도와 주실 래요? 감사합니다

답변

0

clock 함수는 실시간이 아닌 CPU 시간을 반환합니다. 한 스레드 또는 두 스레드와 비슷한 양의 CPU 시간을 사용하지만 두 스레드는 실제 스레드의 절반을 사용해야합니다.

관련 문제