从线程中的不同类运行方法

时间:2014-10-03 18:11:02

标签: c++ multithreading

我遇到了从另一个方法运行并行一个类方法的问题。这是我的代码:

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次。有人可以帮我吗?感谢

1 个答案:

答案 0 :(得分:0)

clock函数返回CPU时间,而不是实时。使用一个或两个线程的CPU时间相似,但两个线程应该使用一半的实时时间。