我遇到了从另一个方法运行并行一个类方法的问题。这是我的代码:
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 :(得分:0)
clock
函数返回CPU时间,而不是实时。使用一个或两个线程的CPU时间相似,但两个线程应该使用一半的实时时间。