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倍。任何人都可以幫助我嗎?謝謝