cichaqiu4015 2017-03-08 09:09 采纳率: 0%
浏览 3702

C++多线程在执行时,其运行时间比顺序执行时长很多,感觉不合理又找不出原因。请大家解答一下。谢谢。

#define _CRT_SECURE_NO_WARNINGS
#include <iostream> 
#include <iomanip> 
#include <math.h> 
#include <ctime> 
#include <thread>
#include <Windows.h>
using namespace std;

void main()
{
    double time = 0;
    double counts = 0;
    LARGE_INTEGER nFreq;
    LARGE_INTEGER nBeginTime;
    LARGE_INTEGER nEndTime;
    QueryPerformanceFrequency(&nFreq);
    QueryPerformanceCounter(&nBeginTime);//开始计时

    void collision_list_1();    //函数声明
    void collision_list_2();

    thread collision_test[2];//创建两个线程
    collision_test[0] = thread{ collision_list_1};
    collision_test[0].detach();
    collision_test[1] = thread{ collision_list_2};
    collision_test[1].detach();

    QueryPerformanceCounter(&nEndTime);//停止计时并输出
    time = (double)(nEndTime.QuadPart - nBeginTime.QuadPart) / (double)nFreq.QuadPart;
    cout << "多线程程序执行时间:" << time * 1000 << "ms" << endl;

    double time_1 = 0;
    double counts_1 = 0;
    LARGE_INTEGER nFreq_1;
    LARGE_INTEGER nBeginTime_1;
    LARGE_INTEGER nEndTime_1;
    QueryPerformanceFrequency(&nFreq_1);
    QueryPerformanceCounter(&nBeginTime_1);//开始计时

    collision_list_1();//顺序执行两个函数
    collision_list_2();

    QueryPerformanceCounter(&nEndTime_1);//停止计时并输出
    time_1 = (double)(nEndTime_1.QuadPart - nBeginTime_1.QuadPart) / (double)nFreq_1.QuadPart; 
    cout << "顺序程序执行时间:" << time_1 * 1000 << "ms" << endl;
    system("pause");
}

void collision_list_1()
{
    for (int i = 0; i < 100000;i++)
    {
        int count = 0;
        count++;
    }
}

void collision_list_2()
{
    for (int i = 0; i < 100000; i++)
    {
        int count = 0;
        count++;
    }
}
  • 写回答

3条回答

  • 面向对象思考 博客专家认证 2017-03-08 22:41
    关注

    一般来说,如果没有等待其他模块的情况,多任务一定比顺序执行慢。因为要额外处理多任务切换。

    评论

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置