feiduoge 2020-08-06 11:36 采纳率: 0%
浏览 463

C++ Openmp #pragma omp for

    int i = 0;
    int total = 0;
#pragma omp parallel
    {
        int iID = omp_get_thread_num();
        printf("1.I am Thread %d\n", omp_get_thread_num());
#pragma omp for
        for (i = 0; i < 20000; i++)
        {
            total += i;
            int iID = omp_get_thread_num();
            printf("2.I am Thread %d\n", omp_get_thread_num());
        }
    }
    std::cout << "OpenMP total:" << total<< std::endl;

上面的代码计算得到的total结果是正确的(重复跑过多次),并且for循环也是多线程跑的,我的问题是在total+=i的时候,我不需要用原子或者临界区去控制吗?

  • 写回答

2条回答 默认 最新

  • threenewbee 2020-08-06 12:03
    关注
    #pragma omp for
    放在了循环的开头,编译器会自动处理同步。
    
    评论

报告相同问题?

悬赏问题

  • ¥15 有人知道怎么在R语言里下载Git上的miceco这个包吗
  • ¥15 GPT写作提示指令词
  • ¥20 如何在cst中建立这种螺旋扇叶结构
  • ¥20 根据动态演化博弈支付矩阵完成复制动态方程求解和演化相图分析等
  • ¥20 关于DAC输出1.000V对分辨率和精度的要求
  • ¥20 想写一个文件管理器,加载全部子文件夹后,要一级一级返回
  • ¥15 华为超融合部署环境下RedHat虚拟机分区扩容问题
  • ¥15 哪位能做百度地图导航触点播报?
  • ¥15 请问GPT语言模型怎么训练?
  • ¥15 已知平面坐标系(非直角坐标系)内三个点的坐标,反求两坐标轴的夹角