C/C++代码验证多线程计算与单线程计算同一组值(1000个)求和花费的时间

#include<iostream>
#include<mutex>
#include<list>
#include<thread>
#include<vector>

#include "function_Ptr.h"
#include "testThread.h"
#include "testMutex.h"


int main(void)
{
    RegFun(Min);
    Plat();

    RegFun(Max);
    Plat();

#if 1
    auto mainThreadId = std::this_thread::get_id();
    cout << "mainThreadId = " << mainThreadId << endl;

    //start a thread
    std::vector<double> v;
    for (int i = 0; i < 1000; i++)
    {
        v.push_back(rand());
    }
    cout <<  "vector size = "<< v.size() << endl;
    double value = 0.0;
    auto st = clock();
    cout << "st = " << st << endl;
    for (auto & info : v)
    {
        value += caculate(info);
    }
    auto ed = clock();
    cout << "ed = " << ed << endl;
    cout << "single thread: " << value << " " << ed - st << "ms" << endl;

    // multithread
    auto iterMid = v.begin() + (v.size() / 2);     // ptr vector

    //calculator vector iterMid to iterEnd
    double anotherv = 0.0;
    auto iterEnd = v.end();
    st = clock();
    cout << "st = " << st << endl;

    std::thread s([&anotherv, mainThreadId, iterMid, iterEnd]() {           // lambda
        anotherv = visitRange(mainThreadId, iterMid, iterEnd, caculate);
    });

    // calculator vector begin() to iterMid
    auto halfv = visitRange(mainThreadId, v.begin(), iterMid, caculate);

    //close thread
    s.join();

    ed = clock();
    cout << "ed = " << ed << endl;
    cout << "multi thread: " << (halfv + anotherv) << " " << ed - st << "ms" << endl;

#endif

    msgList mlist;
    thread pwrite0(&msgList::WriteList, &mlist);
    thread pwrite1(&msgList::WriteList, &mlist);
#if 1
    pwrite0.join();
    pwrite1.join();
#endif
    cout << "threads end!" << endl;

    mlist.showList();  //after subthread end, mainthead print list
    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值