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